如何将python协程用作芹菜任务

2024-03-29 13:47:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我的龙卷风计划中有老芹菜版本。我现在的芹菜版本是3.1.23。以前有一个旧的库https://github.com/mher/tornado-celery,现在已经死了,所以我想把它去掉,把芹菜更新到新版本。你知道吗

我不想修改太多的代码,所以我希望能够在芹菜任务中使用async/await语法。有可能这样做吗

@app.task
async def add(x, y):
    res = await some_async_function(x)
    ......

什么?你知道吗

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

任何提示都适用于asyncio或tornado。你知道吗

升级版本:

即使芹菜任务已经是异步的,我也需要使用协程的能力。我需要协同程序,因为目前我们有很多任务是用异步调用编写的,这要归功于tornado芹菜库和某种黑魔法。我们有通过异步驱动程序的数据库调用,对AWS的异步调用等等。因此,我需要在芹菜任务中使用异步语法。我可以用事件之类的东西_循环。运行\u直到\u完成(…)异步或龙卷风.ioloop.ioloop.instance()。例如,在tornado中运行\u sync(lambda:do \u something(1)),但这绝对不是最好的方法


Tags: 代码https版本githubcomasync语法await
1条回答
网友
1楼 · 发布于 2024-03-29 13:47:43

目前据我所知,这是不可能的。。。你知道吗

芹菜任务是异步执行的,所以真的不需要使用协程。delay()、apply\u async()和send\u task()正在返回AsyncResult(类似未来的对象)。这一切都是有意义的,因为芹菜早于Python的asyncio和async/await,后者后来进入了Python语言。你知道吗

如果您必须使用async/await,那么我能想到的唯一解决方案就是将您的异步逻辑封装在一个常规芹菜任务中。你知道吗

相关问题 更多 >