我正在尝试在事件循环之外使用协程函数。 (在本例中,我想调用 Django 中的一个函数,该函数也可以在事件循环内使用)
如果不让调用函数成为协程,似乎没有办法做到这一点。
我意识到 Django 被构建为阻塞的,因此与 asyncio 不兼容。尽管我认为这个问题可能会对正在进行转换或使用遗留代码的人有所帮助。
就此而言,它可能有助于理解异步编程和why它不适用于阻止代码。
经过大量研究后,我认为这些解决方案可能会有所帮助:
-
更新您的旧代码以使用 asyncio:
是的,我知道这可能很艰难和痛苦,但这可能是最明智的选择。如果您想像我一样使用 Django...那么,您需要做很多工作才能使 Django 异步。我不确定这是否可能,但我至少发现了一次尝试:https://github.com/aaugustin/django-c10k-demo(尽管如此,作者在 YouTube 视频中解释了其所有缺点)。
-
使用 asyncio.async 或 asyncio.Task:
这些项目将使您能够在阻塞代码内运行一些异步内容,但这里的缺点是您将无法等待它们完成而不做一些丑陋的事情,例如检查未来是否已完成的 while 循环...呃,但如果您不需要结果,那可能对您有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)