我想做一个 while 循环等待并仅在收到信号时继续
例如在 while.py 中
while queue:
#wait until signal
#bla bla
当我点击我的 flask 服务器上的按钮时,它应该向这个循环发送信号以继续:在 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()
Explanation:
我们启动了一个生产者线程(以下简称生产者)和一个消费者线程(以下简称消费者)。 生产者不断添加到队列中,消费者不断从队列中移除。 由于队列是一个共享变量,我们将其保存在锁中以避免竞争条件。 在某个时候,消费者已经消费完所有东西而生产者还在 sleep 。消费者尝试消费更多,但由于队列为空,因此引发了 IndexError。 但是在每次执行时,在引发 IndexError 之前,您将看到打印语句告诉您“队列中没有任何内容,但消费者将尝试消费”,这解释了您收到错误的原因。
关于python - 如何等到信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44204316/