Python:subprocess.Popen()的第一个实例非常慢

时间:2011-03-22 23:32:57

标签: python subprocess popen

我确定我遗漏了一些简单的东西,但是当使用子进程模块时,启动第一个子进程的等待时间非常长(> 10秒)。第二个是在第一个之后不久开始的。有没有什么办法解决这一问题?代码如下:

编辑:要添加,HWAccess(在proc.py中)链接一个dll。这跟它有什么关系吗? 编辑2:我已经将测试归结为启动一个SINGLE子进程,导入HWAccess所需的时间比直接从cmd提示符运行proc.py要长得多。如果它从cmd快速加载,我不知道这与dll有什么关系,而不是通过test.py

作为子进程加载

test.py:

import subprocess
import os
import time

print 'STARTING'
proc0 = subprocess.Popen(['python','proc.py','0'])
proc1 = subprocess.Popen(['python','proc.py','1'])

while True: 
    try: pass
    except KeyboardInterrupt: 
    os._exit(0)
except ValueError: 
    pass

proc.py:

print 'Process starting...'
import HWAccess
print 'HWAccess imported...'
import sys
print 'sys imported...'
import time
print 'time imported...'

print 'hi from ',sys.argv[1]

编辑:打印完成后,大约有5秒到达第一个'流程开始...',第二个流程随后立即打印'流程开始...'。然后有一个约30秒的暂停来导入HWAccess(在一个单独的进程上运行几秒钟),第二个进程然后立即打印出它也导入了HWAccess ...从那时起执行很快。 HWAccess链接一个.dll所以我想知道两个进程是否试图导入HWAccess会导致某种竞争条件需要一段时间才能进行协商。

1 个答案:

答案 0 :(得分:3)

我不确定这是否是正确的方法,但我记得在开始一个过程时看到了这样的延迟(而不是与Python相关),结果发现它们与我的一些配置不当的网络设置有关。电脑。在子进程启动时,它必须设置进程间通信,这些设置可能会干扰。

我记得我的问题与在机器上使用错误的主机名有关,但在网络上没有正确配置 - 你能检查一下它是否是你的情况?如果它不是生产机器,请尝试根本不设置主机名,将其保留为“localhost”。