[英]How to integrate Faust with Django?
我正在尝试将 Faust 与 Django 集成以将消息发布到 Kafka。 这是浮士德回购中的例子: https://github.com/robinhood/faust/tree/master/examples/django
我对其进行了一些修改,并创建了视图以通过 Faust 将数据推送到 Kafka。
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]> 将 Future 附加到一个不同的循环
我正在使用开发服务器运行这个 Django 应用程序。 我究竟做错了什么? 任何人? :)
请参阅 faust 文档中的常见问题解答部分
我可以将 Faust 与 Django/Flask 等一起使用吗?
是的! 使用eventlet
作为与asyncio
集成的桥梁。
使用eventlet
此方法适用于任何可与eventlet
一起使用的阻塞 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
警告 这是非常重要的,它位于模块的最顶部,并且它在您导入库之前执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.