Мультиплексирование в очереди.Очередь?

Как я могу выполнить «выбор» для нескольких очередей. Очередь одновременно?

Golang имеет желаемую функцию со своими каналами:

select {
case i1 = <-c1:
    print("received ", i1, " from c1\n")
case c2 <- i2:
    print("sent ", i2, " to c2\n")
case i3, ok := (<-c3):  // same as: i3, ok := <-c3
    if ok {
        print("received ", i3, " from c3\n")
    } else {
        print("c3 is closed\n")
    }
default:
    print("no communication\n")
}

При этом первый разблокируемый канал выполняет соответствующий блок. Как мне добиться этого в Python?

Update0

Согласно ссылке , приведенной в ответе tux21b , желаемый тип очереди имеет следующие свойства:

  • Многопроизводитель / multi-consumer queues (MPMC)
  • предоставляет FIFO / LIFO для каждого производителя
  • Когда очередь пуста / заполнена, потребители / производители блокируются

Кроме того, каналы могут блокироваться, производители будут блокироваться, пока потребитель не получит элемент. Я не уверен, что очередь Python может это сделать.

12
задан Community 23 May 2017 в 10:31
поделиться