Asyncio позволяет легко сделать неблокирующий запрос , если ваша программа работает в asyncio . Например:
async def doit():
task = asyncio.create_task(call_endpoint_async(url, data))
print('cp #1')
await asyncio.sleep(1)
print('is it done?', task.done())
await task
print('now it is done')
Но для этого необходимо, чтобы "вызывающий" также был асинхронным. В вашем случае вы хотите, чтобы весь цикл событий asyncio работал в фоновом режиме, так что. Этого можно достичь, запустив его в отдельном потоке, например:
pool = concurrent.futures.ThreadPoolExecutor()
# ...
def post(self, request):
fut = pool.submit(asyncio.run, call_endpoint_async(url, data))
print('cp #1')
Однако в этом случае вы ничего не получите, используя asyncio. Так как вы все равно используете потоки, вы также можете вызвать функцию синхронизации, например, requests.get()
.