如何要等到信号
问题描述:
我想使while循环等待和继续只有在接收到信号如何要等到信号
例如在while.py
while queue:
#wait until signal
#bla bla
而当我打我的烧瓶服务器上的按钮,它应该发送信号到这个循环继续:在main.py
def alarm():
#trigger loop to continue
有没有办法做到这一点?
答
您需要了解简单的生产者 - 消费者例子,(see source)
from threading import Thread, Lock
import time
import random
queue = []
lock = Lock()
class ProducerThread(Thread):
def run(self):
nums = range(5) #Will create the list [0, 1, 2, 3, 4]
global queue
while True:
num = random.choice(nums) #Selects a random number from list [0, 1, 2, 3, 4]
lock.acquire()
queue.append(num)
print "Produced", num
lock.release()
time.sleep(random.random())
class ConsumerThread(Thread):
def run(self):
global queue
while True:
lock.acquire()
if not queue:
print "Nothing in queue, but consumer will try to consume"
num = queue.pop(0)
print "Consumed", num
lock.release()
time.sleep(random.random())
ProducerThread().start()
ConsumerThread().start()
说明:
我们开始一个生产线(以下简称生产)和一个消费者线程(以下简称消费者)。 生产者不断加入队列,消费者不断从队列中删除。 由于队列是一个共享变量,我们将它保持在锁内以避免竞争状态。 某些时候,消费者已经消费了一切,生产者仍然在睡觉。消费者尝试消耗更多,但由于队列是空的,会引发IndexError。 但是在每次执行时,在引发IndexError之前,您将看到print语句告诉“队列中没有任何内容,但消费者会尝试使用”,这就解释了为什么会出现错误。