Есть ли какие-нибудь встроенные межпотоковые события в python? - PullRequest
9 голосов
/ 24 марта 2009

Есть ли какой-нибудь встроенный синтаксис в python, который позволяет мне публиковать сообщения в определенном потоке python внутри моей проблемы? Например, «связанный сигнал в очереди» в pyQt или :: PostMessage () в Windows. Мне это нужно для асинхронного взаимодействия между частями программы: существует ряд потоков, которые обрабатывают сетевые события, и им необходимо отправить эти события в один «логический» поток, который переводит события безопасным однопоточным способом.

Ответы [ 2 ]

10 голосов
/ 24 марта 2009

Модуль Queue - это python, хорошо подходящий для того, что вы описываете.

Вы можете настроить одну очередь, которая будет использоваться всеми вашими потоками. Потоки, которые обрабатывают сетевые события, могут использовать queue.put для отправки событий в очередь. Логический поток будет использовать queue.get для извлечения событий из очереди.

import Queue
# maxsize of 0 means that we can put an unlimited number of events
# on the queue
q = Queue.Queue(maxsize=0)

def network_thread():
    while True:
        e = get_network_event()
        q.put(e)

def logic_thread():
    while True:
        # This will wait until there are events to process
        e = q.get()
        process_event(e)
1 голос
/ 24 марта 2009

Я не совсем уверен, что вы ищете. Но для этого, конечно, нет встроенного синтаксиса. Посмотрите на модули queue и threading . Существует множество полезных вещей, таких как очереди, условия, события, блокировки и семафоры, которые можно использовать для реализации всех видов синхронной и асинхронной связи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...