目前,我有大约5000个工作,我已经调度和即时调度:
df['ID'] = df[['IDx', 'IDy']].apply(lambda x: ','.join(x.fillna('')), axis=1)
df['ID'] = df['ID'].str.strip(',')
完成循环需要大约18秒
我已尝试将它们全部作为群组()通话发送,但它似乎也很慢。
关于如何快速派遣多个工作的任何建议?
另外,我已尝试通过多处理并行化调度,但线程/进程的开销似乎也否定了这个好处
答案 0 :(得分:2)
这将取决于如何检索Jobs
,但我们使用调度程序任务处理此问题,然后我们可以调用调度程序任务。
@task
def process_job(job):
# do stuff for this job
@task
def dispatcher():
for job in Jobs:
process_job.apply_async(args=[job], queue='job_queue')
答案 1 :(得分:0)
也许您应该尝试celery-dispatcher,它使用一个独立的线程来分派任务。
您可以在主任务中产生子任务,并在另一个函数中处理每个结果:
def handle_result(root_id, task_id, retval, **kwargs):
print(retval)
@shared_task
def sqrt(i):
return i * i
@dispatch(receiver=handle_result)
@shared_task
def calc():
for i in range(10):
yield sqrt, (i,)