我正在使用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。有什么想法吗?
您可以使用这样的东西(3.0中的支持)
回答开场白:从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
相关问题 更多 >
编程相关推荐