Как объединить async-функции и обратные вызовы в python?

Если у меня есть асинхронное представление в Django, могу ли я сделать так, чтобы оно ожидало обратного вызова?

Псевдокод:

async def my_view(request):
    # Use external services that eventually send data to /callback/
    do_something()
    # Wait for the callback
    result = await callback_executed()
    do_something_else(result)

# view for /callback/
def callback(request, result):
    # Here control should be returned to my_view providing the result data

Я хотел бы избежать необходимости реализовывать вторую часть my_view внутри callback, а иметь async-функцию, которая возвращает результат в исходное представление, как только будет выполнен обратный вызов.

Я решил эту проблему с помощью redis.

Представление my_view опрашивает очередь redis pubsub:

def my_view(request)
    pubsub = redis.pubsub()
    await pubsub.subscribe("some_channel")
    # Use external services that eventually send data to /callback/
    do_something()
    # Wait for the callback
    for _ in range(30):
        message = await pubsub.get_message(ignore_subscribe_messages=True)
        if message:
            result = message["data"]
            do_something_else(result)
            break
        await asyncio.sleep(1.0)

А представление callback публикуется в очереди:

def callback(request, result):
    redis.publish("some_channel", result)
Вернуться на верх