在python程序中,我需要基于线程模块的2个线程。Thread#1生成一些数据并将其放入缓冲区中,而thread#2则负责处理缓冲区中的数据。
所以我的伪代码是这样的:线程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标志“循环上。
下面是我的问题:
发布于 2012-03-07 07:03:15
听起来the Queue module就是你所需要的。
这将给您一个阻塞FIFO队列。每当使用者线程从队列中得到一些东西时,如果队列中什么都没有,它就会阻塞,直到某个东西可用为止,从而使生产者线程有时间产生一些东西。
如果您担心生产者线程占用了所有的计算周期,则可以限制队列的大小。如果队列已满,而生产者线程有要添加的内容,则它将阻塞,直到使用者线程取出某些内容。
以下是一些伪码:
import Queue
q = Queue.Queue()
# Producer thread
while True:
data = generate_some_data()
q.put(data)
# Consumer thread
while True:
data = q.get()
process_data(data)https://stackoverflow.com/questions/9597042
复制相似问题