Estoy tratando de integrar Faust con Django para publicar los mensajes en Kafka. Aquí está el ejemplo en el repositorio de Faust: https://github.com/robinhood/faust/tree/master/examples/django
Lo modifiqué un poco y creé vistas para enviar datos a Kafka a través de 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")Pero ahora me sale este error:
RuntimeError en / Tarea <Tarea pendiente nombre='Tarea-1' coro=<AsyncToSync.main_wrap() ejecutándose en /Users/mysuer/.pyenv/versions/3.8.3/envs/faustdjango/lib/python3.8/site- packages/asgiref/sync.py:204> cb=[_run_until_complete_cb() en /Users/mysuer/.pyenv/versions/3.8.3/lib/python3.8/asyncio/base_events.py:184]> obtuvo Future adjunto a un bucle diferente
Estoy ejecutando esta aplicación Django usando un servidor de desarrollo. ¿Qué estoy haciendo mal? ¿Alguien? :)
Consulte la sección de preguntas frecuentes en la documentación de Faust
¿Puedo usar Faust con Django/Flask/etc.?
¡Sí! Use eventlet como puente para integrarse con asyncio .
Usando eventlet
Este enfoque funciona con cualquier biblioteca de bloqueo de Python que pueda funcionar con eventlet .
El uso eventlet requiere que instale el módulo aioeventlet , y puede instalarlo como un paquete junto con Faust:
$ pip install -U faust[eventlet] Luego, para usar eventlet como el bucle de eventos, debe usar el argumento -L <faust --loop> para el programa faust :
$ faust -L eventlet -A myproj worker -l info o agrega import mode.loop.eventlet en la parte superior de tu script de punto de entrada:
#!/usr/bin/env python3 import mode.loop.eventlet # noqaAdvertencia Es muy importante que esté en la parte superior del módulo y que se ejecute antes de importar bibliotecas.