在多个Python多处理队列上"选择"?

cdl*_*ary 27 python events select synchronization multiprocessing

在两个(多处理)队列中的任何一个队列中存在某些东西(两者都驻留在同一系统上)之前,等待(不旋转)的最佳方法是什么?

Jak*_*iak 26

实际上你可以在select.select中使用multiprocessing.Queue对象.即

que = multiprocessing.Queue()
(input,[],[]) = select.select([que._reader],[],[])
Run Code Online (Sandbox Code Playgroud)

只有在准备好读取时才会选择que.

虽然没有关于它的文档.我正在阅读multiprocessing.queue库的源代码(在linux上它通常像/usr/lib/python2.6/multiprocessing/queue.py一样)来查找它.

有了Queue.Queue,我没有找到任何聪明的方法来做到这一点(我真的很喜欢).

  • 这在Unix上很有用,但在Windows上,`select.select`实现只能处理套接字,而不能处理文件描述符,因此会失败. (5认同)
  • `Queue.Queue` 和 `multiprocessing.Queue` 之间的主要区别是什么,`multiprocessing.Queue` 可以用于多线程而不仅仅是多处理吗? (3认同)

ars*_*ars 14

看起来还没有正式的方法来解决这个问题.或者至少,不是基于这个:

你可以试试这篇文章正在做的事情 - 访问底层管道文件句柄:

然后使用select.

  • 不幸的是,第二个URL不再起作用 (2认同)
  • @AndreHolzner有一个工作版本:https://web.archive.org/web/20141124021104/http://haltcondition.net:80 /?p = 2319 (2认同)