我在Python 3.5中有一个异步函数,如下所示:
async def get_pool():
if Cache.__current:
return Cache.__current
Cache.__current = await aioredis.create_redis_pool(
(settings.CACHE_SETTINGS['SERVER'], settings.CACHE_SETTINGS['PORT']),
minsize=settings.CACHE_SETTINGS['MIN_SIZE'],
maxsize=settings.CACHE_SETTINGS['MAX_SIZE'])
return Cache.__current
以及调用异步 get_pool(( 函数并对其数据执行操作的芹菜定期任务:
@app.task
def check_data_task():
cache = Cache.get_pool()
...
正如预期的那样,此代码给出一个错误:
("'coroutine' object has no attribute XXX method'")
现在是提出问题的时候了:
- 这是在芹菜任务中使用 Python 异步函数的好主意吗? 如果是,那么:
- 如何在芹菜任务中使用 Python 协程函数?
from asgiref.sync import async_to_sync
async def get_pool():
if Cache.__current:
....
@app.task
def check_data_task():
...
async_to_sync(get_poll)