python中是否有任何内置的跨线程事件?

时间:2009-03-24 08:04:41

标签: python events delegates

python中是否有任何内置语法允许我在我的问题中向特定的python线程发布消息?就像在Windows中的pyQt或:: PostMessage()中的“排队连接信号”一样。我需要这个用于程序部分之间的异步通信:有许多线程处理网络事件,他们需要将这些事件发布到单个“逻辑”线程,该线程可以安全地转换事件的单线程方式。

2 个答案:

答案 0 :(得分:10)

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 :(得分:1)

我不确定你在寻找什么。但是肯定没有内置的语法。查看queuethreading模块。有许多有用的东西,如队列,条件,事件,锁和信号量,可用于实现所有类型的同步和异步通信。