【发布时间】:2015-05-09 17:47:51
【问题描述】:
我在 2 台机器(n1,n2)上有两个 celery 节点,我的任务队列在另一台机器(主)上。 主机可能不知道可用的节点名称。 我的问题是是否可以保证一系列任务将在单个节点上运行。
res = chain(generate.s(filePath1, filePath2), mix.s(), sort.s())
问题在于各种任务都在使用特定于节点的本地数据文件。 我的猜测是,chain 可能就像文档明确表示不能保证在单个节点上运行的和弦一样。 如果我对链的猜测是正确的,那么我的下一个问题是,作为链的替代品,以下是一个很好的解决方案吗?
单个任务 = 保证单个节点
@app.task
def my_chain_of_tasks():
celery.current_app.send_task('mymodel.tasks.generate', args=[filePath1, filePath2]).get()
celery.current_app.send_task('mymodel.tasks.mix').get()
# do these 2 in parallel:
res1 = celery.current_app.send_task('mymodel.tasks.sort')
res2 = celery.current_app.send_task('mymodel.tasks.email_in_parallel')
res1.get()
return res2.get()
或者这仍然会将任务发送到消息队列并导致同样的问题?
【问题讨论】: