首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用线程模块在python中实现线程

用线程模块在python中实现线程
EN

Stack Overflow用户
提问于 2012-03-07 06:55:28
回答 1查看 384关注 0票数 1

在python程序中,我需要基于线程模块的2个线程。Thread#1生成一些数据并将其放入缓冲区中,而thread#2则负责处理缓冲区中的数据。

所以我的伪代码是这样的:线程1:

代码语言:javascript
复制
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标志“循环上。

下面是我的问题:

  1. ,我对线程模块的上述预期/理解是否正确?
  2. (如果我是对的)是否在"while标志“循环中浪费了整个进程时间的一半?不管怎么说,是否存在完全消除"while标志”循环的问题?我试图找出另一个可以让线程在lock.acquire()方法中休眠的结构,但是,我无法找到一种%100安全的方法。(当一个线程重新释放锁时,在同一个线程再次获得锁之前,没有人保证另一个线程将获得它)
EN

回答 1

Stack Overflow用户

发布于 2012-03-07 07:03:15

听起来the Queue module就是你所需要的。

这将给您一个阻塞FIFO队列。每当使用者线程从队列中得到一些东西时,如果队列中什么都没有,它就会阻塞,直到某个东西可用为止,从而使生产者线程有时间产生一些东西。

如果您担心生产者线程占用了所有的计算周期,则可以限制队列的大小。如果队列已满,而生产者线程有要添加的内容,则它将阻塞,直到使用者线程取出某些内容。

以下是一些伪码:

代码语言:javascript
复制
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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9597042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档