我正在一个(不在django内的)项目中使用django ORM。我的工作流程是:
- 使用django ORM选择对象
- 然后使用一个asyncio库将其发送到消息队列
问题在于你不能在异步环境中调用阻塞函数,也不能在阻塞环境中使用async/await。
我想出了两种解决方案:
- 整个程序应该是异步的。然后在需要调用阻塞函数时使用
loop.run_in_executor
。 - 整个程序应该是同步的。然后使用
asyncio.run()
(Python 3.7)来调用所需的异步函数。
我无法决定哪种方法更好。
我知道之前有人问过一个类似的问题(参见此链接)。我的问题是,在尝试结合阻塞和非阻塞代码时是否有一般规则?