[英]python multiprocessing - access the process name inside the function called with Process.start(target=func)
[英]Python Multiprocessing Process.start() wait for process to be started
我有一些测试用例,在其中启动Web服务器进程,然后运行一些URL测试以检查每个功能是否运行正常。
服务器进程启动时间取决于执行它的系统。 只需几秒钟,我现在使用time.sleep(5)。 但老实说,我不是sleep()的忠实拥护者,因为它可能适用于我的系统,但是如果测试在服务器需要6秒钟才能启动的系统上运行该怎么办...(因此,这样做绝对不安全。 。)测试将毫无理由地失败。
所以问题是:有没有一种很好的方法来检查过程是否真正开始。
我使用python multiprocessing模块示例:
from multiprocessing import Process
import testapp.server
import requests
import testapp.config as cfg
import time
p = Process(target=testapp.server.main)
p.start()
time.sleep(5)
testurl=cfg.server_settings["protocol"] + cfg.server_settings["host"] + ":" +str(cfg.server_settings["port"]) + "/test/12"
r = requests.get(testurl)
p.terminate()
assert int(r.text)==12
因此,最好避免使用sleep()并真正检查进程何时开始...
您应该使用is_alive
( docs ),但是在进程上启动start()
后,几乎总是返回True。 如果你想确保过程已经在做一些重要的事情,还有周围没有得到time.sleep
(从为此至少,看看另一个想法最后一段)
无论如何,您都可以像这样实现is_alive
:
p = Process(target=testapp.server.main)
p.start()
while not p.is_alive():
time.sleep(0.1)
do_something_once_alive()
如您所见,我们仍然需要“睡眠”并再次检查(仅0.1秒),但是在is_alive
返回True
之前,可能要不到5秒。
如果两个is_alive
和time.sleep
是不够准确的,你知道如果这个过程确实具体的东西还没有,如果你是在控制其他程序,以及,你应该有它提高另一种标志,所以你知道你很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.