• 关于python sunprocess调用wait后,一直阻塞的问题


    今天在用subprocess去执行问一个python脚本的时候,由于python脚本输出的内容很多,而subprocess的pipe的大小是有限制的,如果pipe的内容过多,将阻塞等待被读取,此时如果我使用wait()等待的话,将一直导致父进程阻塞,

    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

    p.wait()

    stdout, stderror = p.communicate()

    Popen.wait()
    等待子进程结束,设置并返回 returncode 属性。
    注意:如果子进程输出了大量数据到stdout或者stderr的管道,并达到了系统 pipe的缓存大小的话,子进程会等待父进程读取管道,而父进程此时正wait着的话,将会产生传说中的死锁,后果是非常严重滴建议使用communicate()来 避免这种情况的发生。
    Popen.communicate(input=None)
    和子进程交互:发送数据到stdin,并从stdout和stderr读数据,直到收到EOF。等待子进程结束。可选的input如有 有的话,要为字符串类型。
    此函数返回一个元组: (stdoutdata, stderrdata) 。
    注意,要给子进程的stdin发送数据,则Popen的时候,stdin要为PIPE;同理,要可以收数据的话,stdout或者stderr也要为 PIPE。
    注意:读到的数据会被缓存在内存里,所以数据量非常大的时候要小心了。
  • 相关阅读:
    Sequence-to-Sequence 论文精读(多层LSTM)
    End-to-End Memory Networks 端到端的记忆网络 精读
    深度之眼PyTorch训练营第二期---16、模型保存与加载
    二叉树
    窗体window
    选项卡tabs
    分割按钮splitbutton
    面板pannel
    分页组件pagination
    信息messager
  • 原文地址:https://www.cnblogs.com/GODYCA/p/3117087.html
Copyright © 2020-2023  润新知