【发布时间】:2012-03-07 06:55:28
【问题描述】:
在 python 程序中,我需要 2 个基于 Threading 模块的线程。线程#1 生成一些数据并将其放入缓冲区中,线程#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
(让我们假设对变量“flag”的访问是用合适的锁原子化的。)
我知道线程模块不是并发的。本质上,这意味着除非其中一个线程在某些外部条件(例如 file-io 或 time.sleep)上没有阻塞,否则两个线程将共享总处理时间,而不管任务如何。因此,据我了解,在上述配置中,大约一半的总处理时间将浪费在“while flag”循环上。
所以,这是我的问题:
我对线程模块的上述预期/理解是否正确?总进程时间的一半是否浪费在“while flag”循环中?
(如果我是对的)有没有办法完全摆脱“while 标志”循环?我试图找出另一种结构,在这种结构中我可以让线程在 lock.acquire() 方法中休眠,但是,我想不出一个 %100 安全的方法。 (当一个线程释放锁时,不保证另一个线程会在同一个线程再次获取它之前获取它)
【问题讨论】:
标签: python multithreading locking