python - 运行更多任务的 Celery 任务

标签 python django task celery

我正在使用 celerybeat 启动一项主要任务,该任务启动了许多次要任务。我已经写好了这两个任务。

有没有办法轻松做到这一点? Celery 是否允许在任务中运行任务?

我的例子:

@task
def compute(users=None):
    if users is None:
        users = User.objects.all()

    tasks = []
    for user in users:
        tasks.append(compute_for_user.subtask((user.id,)))

    job = TaskSet(tasks)
    job.apply_async() # raises a IOError: Socket closed

@task
def compute_for_user(user_id):
    #do some stuff

compute 从 celerybeat 调用,但在尝试运行 apply_async 时会导致 IOError。有什么想法吗?

最佳答案

回答您的开场问题:从 2.0 版开始,Celery 提供了一种从其他任务开始任务的简单方法。您所说的“次要任务”就是所谓的“子任务”。请参阅 Sets of tasks, Subtasks and Callbacks 的文档,@Paperino 很乐意链接到。

对于 3.0 版,Celery 改为使用 groups对于这种和其他类型的行为。

您的代码表明您已经熟悉此界面。您的实际问题似乎是,“当我尝试运行我的一组子任务时,为什么会收到 'Socket Closed' IOError?”我认为没有人可以回答这个问题,因为您没有提供有关您的程序的足够信息。您的摘录不能按原样运行,因此我们无法自行检查您遇到的问题。请发布随 IOError 提供的堆栈跟踪,如果运气好的话,可以帮助您解决崩溃问题的人会出现。

关于python - 运行更多任务的 Celery 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6349371/

相关文章:

python - 如何在 python 中编写带有命名空间的 XML 元素

python - 我的 css 和图像没有在 django 中显示

c# - Try/Catch Wrap Around Task.Run 不处理异常

python - 您如何使用 os.chdir 转到减去最后一步的路径?

python - django {% trans "Hello"%} 不工作

python - 通过 OpenCV 在另一个 (HDR) 中插入图像的蒙版区域

.net - Task 对象只能用于线程池线程吗?

postgres : enforced by ORM or DB? 上的 Django unique_together

python - 在 ADMIN_MENU_ORDER 中创建自定义项目

c# - 如何让 WebClient 等到上一次下载完成?