Как ждать любого из списка многопроцессорных событий - PullRequest
1 голос
/ 30 июня 2019

Предположим, у меня есть список событий, я мог бы позвонить

event[i].wait()
# Do something

, чтобы дождаться события с индексом i.

Однако, когда я делаю это, я жду только этого сингла.событие и не знаю, в каком состоянии находятся остальные. Поэтому, если я хочу проверить весь список на предмет установки первого события, я делаю что-то вроде этого.

    while True:
        for event in events:
            if event.is_set():
                # Do something

Однако при этом используется много ресурсов ЦП.Время постоянно проверяю каждый предмет.Что-то, чего избегает стандартный метод ожидания для одного объекта Event.Есть ли в python способ проверить все эти события на предмет изменения первого состояния без нагрузки на ЦП?

I может использовать очередь.Но это включает (AFAIK) выбор элемента очереди, чтобы передать его следующему процессу.Скорость важна в моей программе, и я использую общие ctypes для передачи строк из процесса в процесс, что намного быстрее с размерами, с которыми я работаю.Я использую список событий, чтобы сигнализировать, когда общая строка ctype готова к доступу.

Один из способов, который я подумал, - это использовать Очередь, но она должна содержать очень небольшое количество данных, таких как простое int, чтобы сигнализировать о готовности определенного типа ctype.Но я хотел посмотреть, есть ли лучший, более интуитивный способ решить эту проблему.И этот метод, похоже, тоже требует много времени.

...