运行更多任务的芹菜任务

2024-09-27 18:16:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用cellerybeat启动一个主要任务,启动一些次要任务。这两项任务我都已经写好了。

有什么方法可以轻松做到这一点吗?芹菜允许从任务内部运行任务吗?

我的例子:

@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从cellerybeat调用,但在尝试运行apply_async时会导致IOError。有什么想法吗?


Tags: 方法noneidfortaskasyncdefjob
3条回答

您可以使用这样的东西(3.0中的支持)

g = group(compute_for_user.s(user.id) for user in users)
g.apply_async()

回答开场白:从2.0版开始,芹菜提供了从其他任务开始任务的简单方法。你所说的“次要任务”就是它所说的“子任务”。请参阅Sets of tasks, Subtasks and Callbacks的文档,@Paperino很好地链接到了该文档。

对于版本3.0,芹菜更改为使用groups进行此行为和其他行为类型。

代码表明您已经熟悉这个接口。你的实际问题似乎是,“当我试图运行我的子任务集时,为什么我会得到一个‘Socket Closed’IOError?”我认为没有人能回答这个问题,因为你没有提供足够的程序信息。你的节选不能按原样进行,所以我们不能检查你自己的问题。请张贴IOError提供的stacktrace,如果运气好的话,有人可以帮助您处理崩溃。

因为3.0版的“任务集”不再是术语了。。。组、链和和弦作为一种特殊类型的子任务是新事物,请参见http://docs.celeryproject.org/en/3.1/whatsnew-3.0.html#group-chord-chain-are-now-subtasks

相关问题 更多 >

    热门问题