我确信我错过了一些简单的东西,但是当使用子进程模块时,启动第一个子进程需要等待一段非常长的时间(> 10 秒)。第二个在第一个之后不久开始。有没有什么办法解决这一问题?代码如下:
编辑:要添加,HWAccess(在 proc.py 中)链接一个 dll。这会不会有什么关系呢?
EDIT2:我将测试归结为启动单个子进程,导入 HWAccess 所需的时间比直接从 cmd 提示符运行 proc.py 花费的时间要长得多。我不明白这与 dll 有什么关系,特别是如果它从 cmd 加载得很快,但不是通过 test.py 作为子进程
测试.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
过程.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 的两个进程是否会导致某种需要一段时间才能协商的竞争条件。
我不确定这是否是正确的轨道,但我记得在启动进程时看到了这样的延迟(并且与 Python 完全无关),结果证明它们与我的计算机上一些配置错误的网络设置有关。子进程启动时,它必须设置进程间通信,这些设置可能会产生干扰。
我记得我的问题与机器使用错误的主机名有关,该主机名未在网络上正确配置 - 您可以检查一下是否是您的情况?如果它不是生产计算机,请尝试根本不设置主机名,将其保留为“localhost”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)