“select” on multiple Python multiprocessing Queues?

前端 未结 8 1495
情书的邮戳
情书的邮戳 2020-12-24 01:55

What\'s the best way to wait (without spinning) until something is available in either one of two (multiprocessing) Queues, where both reside on the same system?

8条回答
  •  不思量自难忘°
    2020-12-24 02:25

    Seems like using threads which forward incoming items to a single Queue which you then wait on is a practical choice when using multiprocessing in a platform independent manner.

    Avoiding the threads requires either handling low-level pipes/FDs which is both platform specific and not easy to handle consistently with the higher-level API.

    Or you would need Queues with the ability to set callbacks which i think are the proper higher level interface to go for. I.e. you would write something like:

      singlequeue = Queue()
      incoming_queue1.setcallback(singlequeue.put)
      incoming_queue2.setcallback(singlequeue.put)
      ...
      singlequeue.get()
    

    Maybe the multiprocessing package could grow this API but it's not there yet. The concept works well with py.execnet which uses the term "channel" instead of "queues", see here http://tinyurl.com/nmtr4w

提交回复
热议问题