首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python协程作为celery任务?

如何使用python协程作为celery任务?
EN

Stack Overflow用户
提问于 2019-08-14 21:14:51
回答 1查看 697关注 0票数 2

我在我的龙卷风项目中有旧的芹菜版本。我当前的芹菜版本是3.1.23。有一个旧的库https://github.com/mher/tornado-celery现在已经死了,所以我想摆脱它,并将celery更新到新版本。

我不想更改大量的代码,所以我希望能够在我的芹菜任务中使用async/await语法。有没有可能做这样的事情

代码语言:javascript
复制
@app.task
async def add(x, y):
    res = await some_async_function(x)
    ......

我只看到过同步代码的例子,我不确定我的例子是否适用于芹菜

任何提示对异步者或龙卷风都有好处。

更新:

即使芹菜任务已经是异步的,我也需要能够使用协程。我需要协程,因为目前我们有很多使用异步调用编写的任务,这要归功于tornado-celery库和某种黑魔法。我们有通过异步驱动程序的数据库调用,对AWS的异步调用等等。正因为如此,我需要一种在芹菜任务中使用异步语法的可能性。我可以使用像event_loop.run_until_complete(...)这样的东西例如在asyncio或tornado.ioloop.IOLoop.instance().run_sync(lambda: do_something(1)中)在龙卷风中,但这绝对不是可取的方式

EN

回答 1

Stack Overflow用户

发布于 2019-08-14 21:27:42

目前据我所知这是不可能的.

Celery任务无论如何都是异步执行的,所以真的不需要使用协程。apply_async()、send_task()和delay()返回AsyncResult (类似未来的对象)。这一切都是有意义的,因为芹菜早于Python的asyncio和async/await,后者后来进入了该语言。

如果您一定要使用async/await,我能想到的唯一解决方案就是将您的异步逻辑封装在一个常规的Celery任务中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57495500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档