gpt4 book ai didi

Python Multiprocessing Process.start() 等待进程启动

转载 作者:行者123 更新时间:2023-11-28 21:16:13 25 4
gpt4 key购买 nike

我有一些测试用例,我在其中启动了一个网络服务器进程,然后运行一些 URL 测试以检查每个功能是否正常运行。

服务器进程启动时间取决于执行它的系统。这只是几秒钟的问题,我现在使用 time.sleep(5) 。但老实说,我不是 sleep() 的忠实粉丝,因为它可能适用于我的系统,但如果测试在服务器需要 6 秒才能启动的系统上运行怎么办......(所以这样做从来都不是真正安全的。 .)测试将毫无理由地失败。

所以问题是:是否有一种很好的方法来检查进程是否真的开始了。

我使用 python 多处理模块示例:

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_alivetime.sleep 都不够准确,您无法知道该进程是否真的做了一些特定的事情,以及您是否正在控制另一个进程程序,你应该让它升起另一种标志,这样你就知道你很高兴了。

关于Python Multiprocessing Process.start() 等待进程启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57929895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com