Получение результата синхронного кода в кварте Python

#python #asynchronous #request #synchronization #quart

#python #асинхронный #запрос #синхронизация #кварта

Вопрос:

У меня есть асинхронный маршрут в кварте, в котором я должен запустить синхронный блок кода. Согласно документации, я должен использовать run_sync из quart.utils, чтобы гарантировать, что синхронная функция не блокирует цикл событий.

 def sync_processor():
    request = requests.get('https://api.github.com/events')
    return request

@app.route('/')
async def test():
    result = run_sync(sync_processor)
    print(result)
    return "test"

  

Однако print(результат) возвращает <функция sync_processor в 0x742d18a0> . Как я могу получить объект запроса вместо <функция sync_processor в 0x742d18a0> .

Ответ №1:

Вам не хватает await as run_sync , который обертывает функцию сопрограммной функцией, которую вам затем нужно вызвать, т.Е. result = await run_sync(sync_processor)() Или полностью,

 def sync_processor():
    request = requests.get('https://api.github.com/events')
    return request

@app.route('/')
async def test():
    result = await run_sync(sync_processor)()
    print(result)
    return "test"