python 管道队列_Python 队列Queue和管道Pipes是如何实现的?

问题1:

队列和管道好像是基于文件的?

就是把信息发送到特定文件?再从文件中读取?

如果是这样,那么这个文件生成在哪个目录?隐藏吗?对用户可见吗?如果在linux下,对用户权限如何?

如果不是基于文件,那么是如何实现?

问题2:

# 创建一个队列

q = Queue()

# 阻塞模式下直接读取会阻塞(因为没数据传入队列)

value = q.get()

阻塞表示程序知道我还得取得一个值,就等待一个值发送进来,那么总要有个检测间隔嘛?

这个检测间隔是多少?多少秒?对,就是时间是多少?

为什么问这个?

因为,如果自己写的话:

while True:

if flag == True:

#do sonming #

break

flag迟迟不变为True的话直接cpu就满了,所以我一般写如上代码都会加一个time.sleep(n),让程序中断n秒后再检测Flag的值

while True:

if flag == True:

#do sonming #

break

time.sleep(1)

这样完全不用考虑消耗cpu的问题,因为1秒对于cpu来说"太长"了

在线程中更简单的是,直接使用队列,队列传入一个flag值进来让程序继续运行,完全不用while True:

#

q = Quant()

# 定义线程函数

def thread_fun():

# 要是没有值进来下面这句就无限阻塞

q.get()

# 当有某个值q.put()时就会接着运行

#do sonming #

(不知道说的对不对,不对请指出,下面这句)

我这久都是这么写的,我觉得这样可以很好的控制,最主要的是队列和管道不用考虑锁的问题,这样写不知道效率如何,还是我考虑多了

我猜测q.get()里的实现肯定有while True啊,那么他要不要控制检测的频率??

还是文件系统的检测有什么不一样?

因为我还写过一个一个进程写一个文件,一个进程读同一个文件的,读的进程读到文件的末尾,可以接着readline,只是返回''(空字符串)就是了,这样我肯定不能让读的进程无限读文件啊,消耗cpu和IO,后来我就加了time.sleep(0.5),我觉得对于人来看,0.5秒的间隔够了

但是我比较贪心啊,想追求效率,就是q.get()如果内部不用循环检测的话,那么效率应该会比较高,请问其实如何实现的?

想再开个问题问协程的,这个和协程有没有关系?(还在学习)

算了,不问了,以上

谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值