Как вызвать асинхронную функцию Python 3.5 в задаче сельдерея? - PullRequest
0 голосов
/ 24 мая 2018

У меня есть асинхронная функция в 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

и периодическая задача сельдерея, которая вызывает функцию async get_pool () и выполняет операции над своими данными:

@app.task
def check_data_task():
    cache = Cache.get_pool()
    ...

как и ожидалось. Эти коды выдают ошибку:

("'coroutine' object has no attribute XXX method'")  

и сейчас самое время задавать вопросы:

  1. это хорошая идея использовать асинхронную функцию python взадача сельдерея?если да, то:
  2. как использовать функцию сопрограммы python в задаче сельдерея?

1 Ответ

0 голосов
/ 16 марта 2019
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...