Python 芹菜非阻塞客户端 导入项目任务 导入时间 导入系统 导入套接字 导入日志记录 导入日期时间 lat_to,ts=proj.tasks.timeme(time.time())

Python 芹菜非阻塞客户端 导入项目任务 导入时间 导入系统 导入套接字 导入日志记录 导入日期时间 lat_to,ts=proj.tasks.timeme(time.time()),python,celery,Python,Celery,调用芹菜任务时,该方法同步执行。任务队列的威力在于将任务放在队列上,并让工人异步完成工作 您可以使用任务来完成此操作。方法 我不确定延迟在内部的作用是什么,但它返回得非常快,当您调用它时,您的方法的工作实际上没有完成,您的任务只是放在工作队列上。在我这边工作正常,但默认情况下,它会在回调之前等待任务的结果 import proj.tasks import time import sys import socket import logging import datetime lat_to, t

调用芹菜任务时,该方法同步执行。任务队列的威力在于将任务放在队列上,并让工人异步完成工作

您可以使用任务来完成此操作。方法

我不确定延迟在内部的作用是什么,但它返回得非常快,当您调用它时,您的方法的工作实际上没有完成,您的任务只是放在工作队列上。

在我这边工作正常,但默认情况下,它会在回调之前等待任务的结果

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
如果您想拥有如下所示的任务回调选项,可以尝试

  • 任务发送后
  • 任务发送并确认后
  • 适合原芹菜 执行该任务的行为。首先应用\u async()获取AsyncResult,然后 获取()以获取tornado asynchronous中的实际任务结果 时尚

  • 为什么会有人用龙卷风芹菜?芹菜中的
    delay()
    apply\u async()
    是同步的吗?如果它们是异步方法(正如方法的名称
    apply_async()
    所示,调用是异步的,这意味着
    非阻塞的
    ),那么使用默认的
    芹菜
    @anekix有什么问题,因为我是tornado芹菜的贡献者,我想我有资格回答这个问题:)这取决于用户想要的非阻塞级别。芹菜在代码执行级别上是异步的,这意味着一段代码可以将任务作为消息发送给MessageBroker,让另一段代码在worker中继续执行。tornado在系统I/O级别是异步的,这意味着只有一个线程在运行,当I/O r/w发生时,它将在系统的事件循环中注册,并在有数据/时间延迟时被回调。@anekix所以tornado芹菜解决的用例是,当一段代码向代理发送任务/消息时,它将从套接字级别初始化网络I/O,当tornado(单线程)上下文中该级别出现错误(例如TCP缓冲区已满,往返时间较长)时,整个线程被阻塞,从而导致tornado web服务器被阻塞,这就是为什么我们还需要将芹菜的“发送任务”设置为tornado异步样式,这将防止整个tornado web服务器被阻塞。感谢您的回复。我只是想知道如果我使用的是
    twisted
    ,那么我应该使用什么?至于你提到的关于龙卷风芹菜的类似原因,我认为twisted也不适用于默认芹菜。我说得对吗?
    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()