我想做一个while循环等待,只有当它收到信号
时才继续例如在while.py
中 while queue:
#wait until signal
#bla bla
当我点击我的烧瓶服务器上的按钮时,它应该向此循环发送信号以继续:在main.py中
def alarm():
#trigger loop to continue
有办法吗?
答案 0 :(得分:2)
您需要了解简单的生产者 - 消费者示例,(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()
说明:
我们启动了一个生产者线程(以下称为生产者)和一个消费者线程(以下称为消费者)。 生产者不断添加到队列中,并且消费者继续从队列中删除。 由于queue是一个共享变量,我们将其保持在锁定内以避免竞争条件。 在某些时候,消费者已经消耗了一切,生产者仍然在睡觉。消费者尝试消耗更多,但由于队列为空,因此会引发IndexError。 但是在每次执行时,在引发IndexError之前,你会看到print语句告诉"队列中没有任何内容,但消费者会尝试使用"这解释了为什么你会收到错误。