您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

使用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, time

r,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)
python 2022/1/1 18:50:03 有383人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶