• <bdo id='PXObX'></bdo><ul id='PXObX'></ul>

  • <i id='PXObX'><tr id='PXObX'><dt id='PXObX'><q id='PXObX'><span id='PXObX'><b id='PXObX'><form id='PXObX'><ins id='PXObX'></ins><ul id='PXObX'></ul><sub id='PXObX'></sub></form><legend id='PXObX'></legend><bdo id='PXObX'><pre id='PXObX'><center id='PXObX'></center></pre></bdo></b><th id='PXObX'></th></span></q></dt></tr></i><div id='PXObX'><tfoot id='PXObX'></tfoot><dl id='PXObX'><fieldset id='PXObX'></fieldset></dl></div>
  • <small id='PXObX'></small><noframes id='PXObX'>

      <legend id='PXObX'><style id='PXObX'><dir id='PXObX'><q id='PXObX'></q></dir></style></legend>

    1. <tfoot id='PXObX'></tfoot>

        需要在不通信的情况下避免子进程死锁

        Need to avoid subprocess deadlock without communicate(需要在不通信的情况下避免子进程死锁)

        • <i id='tuws0'><tr id='tuws0'><dt id='tuws0'><q id='tuws0'><span id='tuws0'><b id='tuws0'><form id='tuws0'><ins id='tuws0'></ins><ul id='tuws0'></ul><sub id='tuws0'></sub></form><legend id='tuws0'></legend><bdo id='tuws0'><pre id='tuws0'><center id='tuws0'></center></pre></bdo></b><th id='tuws0'></th></span></q></dt></tr></i><div id='tuws0'><tfoot id='tuws0'></tfoot><dl id='tuws0'><fieldset id='tuws0'></fieldset></dl></div>
          1. <tfoot id='tuws0'></tfoot>

            1. <small id='tuws0'></small><noframes id='tuws0'>

                <bdo id='tuws0'></bdo><ul id='tuws0'></ul>

                  <tbody id='tuws0'></tbody>

                <legend id='tuws0'><style id='tuws0'><dir id='tuws0'><q id='tuws0'></q></dir></style></legend>

                  本文介绍了需要在不通信的情况下避免子进程死锁的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我需要一个EXECUTE命令,该命令会产生大量输出并花费大量时间执行(>30分钟)。我在考虑使用子进程。打开去做。我需要捕获该命令的输出,因此我将管道传递给stdout和stderr。

                  使用Popen.Wait()时的死锁问题在很多论坛上都有很好的文档记录,因此Popen.Communication()是建议的避免死锁的方法。该解决方案的问题是Communication()会阻塞,直到命令完成。在执行命令时,我需要打印到达标准输出的所有内容。如果20分钟后没有输出,脚本执行将被终止。

                  以下是我需要遵守的一些约束:

                  • 我的Python版本是2.4.2,无法升级。
                  • 如果解决方案仍然使用子进程,我需要将subprocess.PIPE传递给所有STD句柄以避免此错误:http://bugs.python.org/issue1124861

                  有办法吗?

                  推荐答案

                  • 要解决python bug #1124861在Python2.4上的问题,您可以将stdin附加到NUL设备

                  import os
                  from subprocess import PIPE, STDOUT, Popen
                  
                  lines = []
                  p = Popen(cmd, bufsize=1, stdin=open(os.devnull), stdout=PIPE, stderr=STDOUT)
                  for line in iter(p.stdout.readline, ''):
                        print line,          # print to stdout immediately
                        lines.append(line)   # capture for later
                  p.stdout.close()
                  p.wait()
                  

                  这篇关于需要在不通信的情况下避免子进程死锁的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  GUI Freezes while downloading PyQt5 and Pytube(GUI在下载PyQt5和Pytube时冻结)
                  How to solve memory issues while multiprocessing using Pool.map()?(如何解决使用Pool.map()进行多处理时的内存问题?)
                  Python - How to use FastAPI and uvicorn.run without blocking the thread?(Python-如何使用FastAPI和uvicorn.run而不阻塞线程?)
                  How to increment a shared counter from multiple processes?(如何从多个进程递增共享计数器?)
                  Using pika, how to connect to rabbitmq running in docker, started with docker-compose with external network?(使用pika,如何连接运行在docker中的rabbitmq,从docker开始-与外部网络连接?)
                  How to use .rolling() on each row of a Pandas dataframe?(如何对 pandas 数据帧的每一行使用.roll()?)

                  <legend id='Obldl'><style id='Obldl'><dir id='Obldl'><q id='Obldl'></q></dir></style></legend>
                  • <i id='Obldl'><tr id='Obldl'><dt id='Obldl'><q id='Obldl'><span id='Obldl'><b id='Obldl'><form id='Obldl'><ins id='Obldl'></ins><ul id='Obldl'></ul><sub id='Obldl'></sub></form><legend id='Obldl'></legend><bdo id='Obldl'><pre id='Obldl'><center id='Obldl'></center></pre></bdo></b><th id='Obldl'></th></span></q></dt></tr></i><div id='Obldl'><tfoot id='Obldl'></tfoot><dl id='Obldl'><fieldset id='Obldl'></fieldset></dl></div>

                        <tfoot id='Obldl'></tfoot>
                          <bdo id='Obldl'></bdo><ul id='Obldl'></ul>
                            <tbody id='Obldl'></tbody>

                            <small id='Obldl'></small><noframes id='Obldl'>