栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用os.pipe和os.fork()问题的Python程序

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用os.pipe和os.fork()问题的Python程序

您是否在未指定大小的情况下使用read()或将管道视为迭代器(

for line in f
)?如果是这样,那可能是您问题的根源-
read()被定义为在返回之前读取直到文件末尾,而不是仅读取可读取的内容。这意味着它将阻塞,直到子代调用close()为止。

在链接到的示例代码中,这没关系-
父级以阻塞方式运行,仅将子级用于隔离目的。如果要继续,则可以按照发布的代码使用非阻塞IO(但准备处理半完成的数据),或者分块读取(例如r.read(size)或r.readline()
),只有在读取了特定的尺寸/行后才会阻塞。(您仍然需要在孩子身上打电话给同花顺)

看起来好像将管道视为迭代器一样,也在使用其他缓冲区,因为

for line in r:
如果需要立即使用每一行,“
”可能无法满足您的需求。可以禁用此功能,但仅在fdopen中为缓冲区大小指定0似乎还不够。

以下是一些应该起作用的示例代码:

import os, sys, timer,w=os.pipe()r,w=os.fdopen(r,'r',0), os.fdopen(w,'w',0)pid = os.fork()if pid:          # Parent    w.close()    while 1:        data=r.readline()        if not data: break        print "parent read: " + data.strip()else:# Child    r.close()    for i in range(10):        print >>w, "line %s" % i        w.flush()        time.sleep(1)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/623584.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号