Alur Kerja Asinkron dan Pekerjaan Latar Belakang
Agen yang berjalan lama memerlukan antrean (Celery, RQ, Temporal)—kembalikan id pekerjaan, lalu periksa statusnya secara berkala.
Alur Kerja Asinkron dan Pekerjaan Latar Belakang adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
Saat Siklus Permintaan Terlalu Lambat
Beberapa tugas agen memerlukan waktu 30 detik, 5 menit, atau berjam-jam. Anda tidak dapat membiarkan koneksi HTTP tetap terbuka. Pindahkan tugas tersebut ke pekerjaan latar belakang asinkron.
Polanya
- Klien mengirim POST tugas -> server membuat pekerjaan dan mengembalikan job_id
- Pekerja mengambil pekerjaan dari antrean
- Klien melakukan polling GET /jobs/{id} untuk memeriksa status
- Setelah selesai, server mengembalikan hasilnya
Submit Endpoint
from uuid import uuid4
@app.post('/jobs')
def submit(req: AgentRequest):
job_id = str(uuid4())
redis.hset(f'job:{job_id}', mapping={'status': 'queued', 'user_id': req.user_id})
queue.enqueue('run_agent_job', job_id, req.query)
return {'job_id': job_id, 'status': 'queued'}Status Endpoint
@app.get('/jobs/{job_id}')
def status(job_id: str):
data = redis.hgetall(f'job:{job_id}')
if not data:
raise HTTPException(404)
return {
'status': data['status'],
'result': data.get('result'),
'error': data.get('error')
}Pekerja
Proses terpisah mengonsumsi antrean:
def run_agent_job(job_id, query):
redis.hset(f'job:{job_id}', 'status', 'running')
try:
result = run_agent(query)
redis.hset(f'job:{job_id}', mapping={'status': 'done', 'result': result})
except Exception as e:
redis.hset(f'job:{job_id}', mapping={'status': 'failed', 'error': str(e)})Pilihan Antrean
- RQ (Redis Queue) — Python minimalis
- Celery — Python klasik dengan banyak fitur
- Temporal — alur kerja tahan lama, percobaan ulang, dan observabilitas
- Dramatiq — alternatif Celery
- Cloud-native — Cloud Tasks, SQS, Pub/Sub
Temporal untuk Alur Kerja Tahan Lama
Alur kerja agen bersifat stateful. Model eksekusi tahan lama milik Temporal sangat cocok:
import temporalio
@temporalio.workflow.defn
class AgentWorkflow:
@temporalio.workflow.run
async def run(self, query: str) -> str:
plan = await workflow.execute_activity(plan_step, query, schedule_to_close_timeout=timedelta(minutes=2))
results = await workflow.execute_activity(execute_step, plan, schedule_to_close_timeout=timedelta(minutes=10))
return await workflow.execute_activity(synthesise_step, results)Pembaruan Parsial dengan Pengaliran
Pekerjaan yang berjalan lama mendapatkan manfaat dari pembaruan kemajuan. Gunakan Server-Sent Events atau WebSockets:
@app.get('/jobs/{job_id}/stream')
def stream_progress(job_id):
def gen():
while True:
update = redis.brpop(f'updates:{job_id}', timeout=30)
if not update:
yield 'data: {"status": "timeout"}\n\n'
break
yield f'data: {update[1].decode()}\n\n'
if 'done' in update[1].decode():
break
return StreamingResponse(gen(), media_type='text/event-stream')TTL Pekerjaan
Jangan menyimpan catatan pekerjaan selamanya:
redis.expire(f'job:{job_id}', 86400) # 1 dayPercobaan Ulang
Kegagalan sementara dicoba ulang secara otomatis; kegagalan permanen dikirim ke DLQ untuk ditinjau manusia:
import time
def retry(retries=3, retry_backoff=True):
def decorator(func):
def wrapper(*args, **kwargs):
for attempt in range(1, retries + 1):
try:
return func(*args, **kwargs)
except Exception as e:
print(f'attempt {attempt} failed: {e}')
if attempt == retries:
raise
return None
return wrapper
return decorator
attempts = {'n': 0}
@retry(retries=3, retry_backoff=True)
def run_agent_job(job_id):
attempts['n'] += 1
if attempts['n'] < 3:
raise RuntimeError('transient error')
return f'job {job_id} done'
print(run_agent_job('job-1'))
Batas Konkurensi
Untuk mengendalikan biaya GPU/API, batasi jumlah pekerja yang berjalan secara bersamaan:
rq worker --burst --max-jobs 1000 --queue agent
# Or per-queue concurrency in Temporal worker config.Kuota per Pengguna
Lacak pekerjaan yang sedang berjalan untuk setiap pengguna:
key = f'inflight:{user_id}'
if redis.scard(key) >= 5:
raise HTTPException(429, 'Too many in-flight jobs')
redis.sadd(key, job_id)Observabilitas
Lacak setiap pekerjaan dari awal hingga akhir. Beri tag pada span dengan job_id dan user_id. Pekerjaan yang gagal harus otomatis membuat tiket atau memicu peringatan.
Pola Pemeriksaan Status Berkala
Mengapa menggunakan pola pengiriman/pemeriksaan status untuk agen yang berjalan lama?
Ringkasan
Kirim pekerjaan dengan POST, kembalikan id, pekerja memprosesnya dari antrean, lalu klien melakukan polling. RQ/Celery untuk kebutuhan sederhana; Temporal untuk alur kerja stateful. TTL, percobaan ulang, kuota, dan pelacakan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Alur Kerja Asinkron dan Pekerjaan Latar Belakang” gratis?
Ya — teks lengkap “Alur Kerja Asinkron dan Pekerjaan Latar Belakang” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Alur Kerja Asinkron dan Pekerjaan Latar Belakang”?
Agen yang berjalan lama memerlukan antrean (Celery, RQ, Temporal)—kembalikan id pekerjaan, lalu periksa statusnya secara berkala. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Agents?
Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Alur Kerja Asinkron dan Pekerjaan Latar Belakang” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?
Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menyajikan Agen melalui API
- Alur Kerja Asinkron dan Pekerjaan Latar Belakang
- Pembatasan Laju dan Pengelolaan Kuota
- Penerapan Blue-Green dan Canary untuk Agen