为什么我的队列因asyncio事件循环而挂起

时间:2019-10-17 21:54:11

标签: python python-multiprocessing python-asyncio

我正在启动一个新进程(编辑同一件事,将其应用于新线程),以用于通过异步事件循环进行计算。新进程具有自己的asyncio事件循环,并且运行良好,没有任何阻塞行为。

我创建了两个队列(multiprocessing.Queuemultiprocessing.Manager.Queue),一个队列用于传出消息,另一个队列用于传入消息。两个队列的行为相同。传出邮件的队列工作正常,因为我使用/ p在队列中放入/获取邮件:

await asyncio.get_running_loop().run_in_executor(None, self.incoming_queue.put, msg)
msg = await asyncio.get_running_loop().run_in_executor(None, self.incoming_queue.get, True, 1)

但是,当我尝试使用asyncio get()命令在原始asyncio应用程序中运行相同的run_in_executor命令时,它只是挂起。事件循环本身看起来很好并且响应迅速。

禁用工作队列不会更改任何内容,执行程序(默认,线程或进程)也不会更改。

想法?

1 个答案:

答案 0 :(得分:0)

根据我的调查,我决定在这里回答。简而言之:由于某种原因,在新流程的新事件循环中起作用的东西在Django Channels事件循环中不起作用。

我当前的解决方案是手动创建一个新线程来运行同步侦听器。我正在研究为什么Channels事件循环在用例中不起作用的选项。