我正在启动一个新进程(编辑同一件事,将其应用于新线程),以用于通过异步事件循环进行计算。新进程具有自己的asyncio事件循环,并且运行良好,没有任何阻塞行为。
我创建了两个队列(multiprocessing.Queue
或multiprocessing.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
命令时,它只是挂起。事件循环本身看起来很好并且响应迅速。
禁用工作队列不会更改任何内容,执行程序(默认,线程或进程)也不会更改。
想法?
答案 0 :(得分:0)
根据我的调查,我决定在这里回答。简而言之:由于某种原因,在新流程的新事件循环中起作用的东西在Django Channels事件循环中不起作用。
我当前的解决方案是手动创建一个新线程来运行同步侦听器。我正在研究为什么Channels事件循环在用例中不起作用的选项。