合作跨服务器芹菜工人

时间:2014-03-19 00:36:13

标签: python celery

我的用例: (芹菜任务A在服务器A上运行,而芹菜任务B在服务器B上运行)

taskA (在服务器A上) - >调用并等待 taskB 完成(在服务器B上) - > taskA on(服务器A)继续执行来自taskB的结果

伪代码:

服务器A上的

@task    
def taskA():
  remoteTask = current_app.send_task("taskB", exchange="xxx", routing_key="serverB")
  result = t.get()
  # process result 
服务器B上的

@task
def taskB():
  # do something
  return result

该代码显然违反了Celery官方指南中提到的"Avoid launching synchronous subtasks"规则。我可以从控制台看到死锁警告。

所以,我尝试用签名方法和运算符

重写子任务样式的代码
@task
def taskA()  
  remoteTask = signature("taskB", exchange="xxx", routing_key="serverB")
  followingTask = signature("taskAA", exchange="xxx", routing_key="serverA")
  chain = remoteTask | followingTask
  return chain()

@task
def taskAA(result)
  # process result  

死锁警告消失了,但代码似乎不太清楚。

有没有更好的解决方案?或者我错过了什么?

0 个答案:

没有答案