import proj.tasks
import time
import sys
import socket
import logging
import datetime
lat_to, ts = proj.tasks.timeme(time.time()) <---- blocking call
lat_from = time.time() - ts
print lat_to, lat_from
芹菜任务块所以我不能利用许多工人。 是否可以进行非阻塞呼叫?
注意:我看过龙卷风芹菜作为非阻塞芹菜客户的选项,但我不确定我是否喜欢这种方法,因为我需要启动龙卷风芹菜网络服务器。
答案 0 :(得分:2)
调用celery任务时,该方法同步执行。任务队列的强大功能是将任务放在队列中,让工作人员异步地完成工作。
您可以使用任务。delay
方法执行此操作。
我不确定内部有什么延迟,但是它很快就会返回,并且当你调用它时,你的方法的工作实际上并没有完成,你的任务只是被放在工作队列中。
答案 1 :(得分:0)
tornado-celery可以正常使用,但默认情况下会在回调之前等待任务的结果,
class GenAsyncHandler(web.RequestHandler):
@asynchronous
@gen.coroutine
def get(self):
response = yield gen.Task(tasks.sleep.apply_async, args=[3])
self.write(str(response.result))
self.finish()
如果您想拥有如下任务回调选项,可以尝试my fork