如何要等到信号

问题描述:

我想使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语句告诉“队列中没有任何内容,但消费者会尝试使用”,这就解释了为什么会出现错误。