芹菜非阻塞客户端

时间:2014-11-07 20:52:08

标签: python celery

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

芹菜任务块所以我不能利用许多工人。 是否可以进行非阻塞呼叫?

注意:我看过龙卷风芹菜作为非阻塞芹菜客户的选项,但我不确定我是否喜欢这种方法,因为我需要启动龙卷风芹菜网络服务器。

2 个答案:

答案 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

  1. 发送任务后
  2. 任务发送和确认后
  3. 适合原始芹菜 task.apply_async()首先获取AsyncResult的行为 AsyncResult.get()获取龙卷风异步的实际任务结果 时尚