1
我在兩臺機器上有兩個芹菜節點(n1,n2),我的任務入隊在另一臺機器上(主)。 主機可能不知道可用的節點名稱。 我的問題是,是否有任何保證任務鏈將在單個節點上運行。Python芹菜在單個節點上的任務鏈
res = chain(generate.s(filePath1, filePath2), mix.s(), sort.s())
問題是各種任務都使用本地數據文件,這些文件是特定於節點的。 我的猜測是,鏈可能是和絃,文檔明確表示,不能保證在單個節點上運行。 如果我對鏈條的猜測是正確的,那麼我的下一個問題是,以下是鏈接的替代方案的一個很好的解決方案嗎?
單任務=保證單個節點
@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()
,或者這是仍然要任務發送到消息隊列和導致同樣的問題?
我有點困惑。我可以在主機上指定CELERY_ROUTES嗎?主機不運行芹菜。它只是排隊消息隊列中的任務。 – max
那很好。你可以在celery配置文件中指定路由。當您在遠程計算機上運行worker時,它只會消耗來自代理 – ChillarAnand
的相關任務,謝謝。讓我想出一個設置來嘗試一下;那麼我會標記你的答案。 – max