以下代码有时会作为错误返回,表明python无法将$ curl -v https://www.google.com
...
< HTTP/1.1 200 OK
与整数进行比较。
这意味着None
即使在p.exitcode
之后也是None
。但是,docs中指出
如果进程尚未终止,则此(退出代码)将为
p.terminate()
。
这怎么可能?
代码:
None
答案 0 :(得分:1)
terminate()
doesn't literally terminate the process:
在POSIX操作系统上,该方法将SIGTERM发送给子级。在Windows上,调用Win32 API函数TerminateProcess()来停止子级。
这两个操作都是异步的:它们请求终止进程,但不等待实际终止。
要等待实际终止(保证exitcode
的可用性),请使用wait()
:
if p.is_alive:
p.terminate()
p.wait()
wait()
返回退出代码,由于Python 3.3带有timeout
参数,因此您可以将代码缩短为:
for j in range(3):
p = multiprocessing.Process(...)
p.start()
exitcode = p.wait(180)
if exitcode >= 0:
break