Python 如何从芹菜任务异步调用url

Python 如何从芹菜任务异步调用url,python,asynchronous,celery,nonblocking,Python,Asynchronous,Celery,Nonblocking,我在Tornado中使用芹菜,我想知道如何在任务中异步调用url 我在寻找以下方面的内容: @celery.task def my_task(data): def handle_response(response): if response.error: print "error" else: print "success" http_client = httpclient.AsyncHTTPCli

我在Tornado中使用芹菜,我想知道如何在任务中异步调用url

我在寻找以下方面的内容:

@celery.task
def my_task(data):
    def handle_response(response):
        if response.error:
            print "error"
        else:
            print "success"

    http_client = httpclient.AsyncHTTPClient()
    http_client.fetch('some url', handle_response, method='POST', body=data)
或:

我现在的问题是,我无法访问响应处理程序。 相反,使用HttpClient是可行的,但因为它会阻塞服务器,所以我正在寻找一种非阻塞解决方案


顺便说一句,我的经纪人是redis,我希望保留它(tornado芹菜回调只有在pika提供解决方案的情况下才有效)

在我看来,你的方法是一种开销。芹菜已经可以异步执行作业了,那么芹菜任务执行阻塞URL调用还有什么更好的地方呢?在异步任务中添加异步url调用是一种开销。我希望这能有所帮助。

嗨,我认为你的方法是一种开销。芹菜已经可以异步执行作业了,那么芹菜任务执行阻塞URL调用还有什么更好的地方呢?在异步任务中添加异步url调用是一种开销。也许你可以解释一下你的用例,这有助于找到合适的解决方案。@Maurroocco我想你是对的。因为我的任务脚本是我应用程序的一部分,甚至使用了tornado的http客户端,所以我工作时的印象是,它是同一个上下文,但我们不再是堪萨斯州了,是吗?:)我是意大利人,为了理解“我们不再是堪萨斯州”这句话的含义,我必须查阅《城市词典》。现在我可以回答你:不,多萝西,我们不是!哇哇!:-D@MauroRocco本·法托!:)你想回答我的问题,让我接受你的回答吗?好的!感谢并祝贺你的意大利语:-)
@celery.task
@gen.coroutine
def my_task(data):
    http_client = httpclient.AsyncHTTPClient()
    response = yield http_client.fetch('some url', method='POST', body=data)
    raise gen.Result(response.body)