Python 要求另一个线程做某事

Python 要求另一个线程做某事,python,multithreading,events,notifications,queue,Python,Multithreading,Events,Notifications,Queue,我有一个线程(1)监听输入信号,当它收到信号时,另一个线程(2)应该执行一个操作。我正在努力决定是否应该在两个线程之间共享一个队列,并将函数从(1)放入队列,然后在(2)的大while循环中放入。python提供了更好的线程间函数调用通信方式吗?我会使用队列 如果要使用或,我认为没有办法告诉工作线程有多个输入要处理。 它们在线程之间提供的通信设备更像是一个切换开关——打开或关闭、通知或等待 因此,如果线程(2)在线程(1)接收到另一个信号时处理信号的中间,线程(1)将没有一个好的方式来告诉线程(

我有一个
线程(1)监听输入信号,当它收到信号时,另一个
线程(2)应该执行一个操作。我正在努力决定是否应该在两个线程之间共享一个
队列
,并将函数从(1)放入队列,然后在(2)的大while循环中放入。
python
提供了更好的线程间函数调用通信方式吗?

我会使用队列

如果要使用或,我认为没有办法告诉工作线程有多个输入要处理。 它们在线程之间提供的通信设备更像是一个切换开关——打开或关闭、通知或等待

因此,如果线程(2)在线程(1)接收到另一个信号时处理信号的中间,线程(1)将没有一个好的方式来告诉线程(2)另一个信号已经到达。相反,队列将把所有鸭子(信号)整齐地排成一行,并允许线程(2)逐个处理它们

import threading
import datetime as DT
import time
import Queue
import random
import itertools

sentinel = None
def worker(queue):
    for date, count in iter(queue.get, sentinel):
        now = DT.datetime.now()
        print('{}: Signal found at {}, processed at {}'
              .format(count, date.strftime('%S.%f'), now.strftime('%S.%f')))
        time.sleep(random.random()*5)

queue = Queue.Queue()
t = threading.Thread(target=worker, args=(queue, ))
t.daemon = True
t.start()

c = 0
while True:
    if random.random() < 0.05:
        queue.put((DT.datetime.now(), c))
        c += 1
    if c >= 5:
        # Tell worker to quit
        queue.put(sentinel)
        t.join()
        break

请注意,所有信号都是在27.3左右找到/生成的(在主线程中),但直到很久以后才被处理(在工作线程中)。

您需要发送函数,还是仅仅发送某种信号告诉线程(2)做某事?基本上就是告诉线程(2)做某事,这将调用一个函数。每次线程(1)接收到信号时,线程(2)应该执行一个操作吗?或者,如果线程(1)接收到信号时它恰好在等待,它应该执行一个操作吗?它应该始终执行该操作,这取决于线程(2)应该如何处理它。非常感谢,我将使用队列。
0: Signal found at 27.308544, processed at 27.308705
1: Signal found at 27.308585, processed at 30.379586
2: Signal found at 27.308601, processed at 35.174354
3: Signal found at 27.308607, processed at 36.649155
4: Signal found at 27.308622, processed at 37.234935