在python程序中,我需要2个基于线程模块的线程。线程#1生成一些数据并将其放入缓冲区,线程#2应该处理缓冲区中的数据。使用线程模块在python中实现线程
所以我的伪代码是这样的: 线程1:
Thread#1
while True:
Generate_Some_Data()
while flag==1:
pass()
Buffer_Address=Write_It_To_Buffer()
flag=1
Thread#2
while True:
while flag==0:
pass()
Process_Data(Buffer_Address)
flag=0
(我们假设访问变量“标志”被雾化,用合适的锁)
我知道线程模块不并发。实质上,这意味着除非其中一个线程在某些外部条件(例如file-io或time.sleep)上不阻塞,否则无论任务如何,两个线程都将共享总处理时间。因此,根据我的理解,在上述配置中,大约一半的处理时间将浪费在“while flag”循环上。
所以,这里是我的问题:
我说得对在线程模块的我上面的期待/理解?在“标志”循环中浪费了总处理时间的一半吗?
(如果我是对的)反正有没有完全摆脱“标志”循环?我试图找出另一个可以让线程在lock.acquire()方法中休眠的结构,但是,我找不到这样做的安全方法。 (当一个线程relases锁,没有quarantee其他线程将收购其同一个线程之前再次获取它)
我也有一个跟进的问题。 python Queue是一个信号量概念的实现,它假定消费者线程是相同的。假设我有2个消费者线程,它们应该根据数据类型来处理队列中的数据。例如,让我们假设如果数据的类型为“int”,则消费者1必须处理它。如果它是“浮动”,则消费者2必须处理它。但是,如果它是“字符串”,那么消费者1和2都不应该处理数据。是否有任何编程范例对于实现这样的问题有用? – tantuni 2012-03-07 18:54:18
@ user460153我只是为每个消费者制作一个单独的队列。 – Taymon 2012-03-07 20:05:15
我认为“条件变量”是这个问题的一个更好的范例。所有消费者线程都等待主线程发出信号。在主线程发出信号后,每个消费者线程检查数据类型并决定是处理数据还是继续休眠。 – tantuni 2012-03-08 18:52:40