Как интегрировать Faust с Django?

Я пытаюсь интегрировать Faust с Django, чтобы публиковать сообщения в Kafka. Вот пример из репозитория Faust: https://github.com/robinhood/faust/tree/master/examples/django

Я немного изменил его и создал представления для отправки данных в Kafka через Faust.

from django.shortcuts import render

from asgiref.sync import async_to_sync

from accounts.agents import AccountRecord, add_account


async def send_data() -> None:
    print("sending..data")
    print(await add_account.ask(AccountRecord(name="tesst", score=10.9, active=False)))

def index(request):
    async_to_sync(send_data)()
    return render(request, "accounts/index.html")

Но теперь я получаю эту ошибку:

RuntimeError at /
Task <Task pending name='Task-1' coro=<AsyncToSync.main_wrap() running at /Users/mysuer/.pyenv/versions/3.8.3/envs/faustdjango/lib/python3.8/site-packages/asgiref/sync.py:204> cb=[_run_until_complete_cb() at /Users/mysuer/.pyenv/versions/3.8.3/lib/python3.8/asyncio/base_events.py:184]> got Future <Future pending> attached to a different loop

Я запускаю это приложение Django с помощью сервера разработки. Что я делаю не так?

1 ответ

См. Раздел FAQ в документации faust

Могу ли я использовать Faust с Django / Flask / и т. Д.?

Да! Использовать как мост для интеграции с asyncio.

С помощью

Этот подход работает с любой блокирующей библиотекой Python, с которой можно работать.

С помощью eventlet требует, чтобы вы установили aioeventlet модуль, и вы можете установить его вместе с Faust:

      $ pip install -U faust[eventlet]

Затем, чтобы фактически использовать eventlet в качестве цикла событий, вы должны либо использовать -L <faust --loop> аргумент к faust программа:

      $ faust -L eventlet -A myproj worker -l info

или добавить import mode.loop.eventlet в верхней части сценария точки входа:

      #!/usr/bin/env python3
import mode.loop.eventlet  # noqa

Предупреждение. Очень важно, чтобы он находился на самом верху модуля и выполнялся до того, как вы импортируете библиотеки.

Другие вопросы по тегам