gpt4 book ai didi

python - celery 中直接调用任务组与通过 apply_async 调用任务组的区别

转载 作者:太空宇宙 更新时间:2023-11-03 21:35:14 25 4
gpt4 key购买 nike

在我的tasks.py中,我有两个celery任务A和B。任务B将用户id作为参数。任务 A 收集所有用户 id,并使用每个用户 id 创建一组任务 B。

@app.task
def A():
user_ids = get_all_user_ids()
job = group(B.s(uid) for uid in user_ids)
job()

@app.task
def B(user_id):
#some heavy processing

在本例中,我直接调用 celery 任务组。问题是,有时它会在任务 A 中给出 SoftTimeLimitExceeded 异常。我的问题是,如果我不直接调用作业,而是使用 apply_async 调用它,这会解决问题吗?另外,直接调用任务组与使用 apply_async 调用任务组之间的确切区别是什么?

最佳答案

job() 语句意味着同步调用组。

如果你编写job.apply_async()作业的任务将被发布到队列并且A立即完成。尽管在这种情况下您可能不会遇到 SoftTimeLimitExceeded 异常,但强烈不建议在任务中调用此类任务,因为可能存在工作线程死锁。请参阅https://github.com/celery/celery/issues/3031

关于python - celery 中直接调用任务组与通过 apply_async 调用任务组的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53278179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com