繁体   English   中英

Python Multiprocessing Process.start()等待进程开始

[英]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_alivedocs ),但是在进程上启动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_alivetime.sleep是不够准确的,你知道如果这个过程确实具体的东西还没有,如果你是在控制其他程序,以及,你应该有它提高另一种标志,所以你知道你很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM