我以前从未使用多线程进程或尝试制作它们而我是编写子进程的编程但是我理解分支在概念上是什么并且本身并不难理解。< / p>
我要做的是跟踪网络上的ping峰值。基本上,我会在子进程中运行ping 1.2.3.4
并在主线程中检查它的输出,然后处理该输出。但是,截至目前的代码如下所示:
def run_background_ping():
background_ping=subprocess.Popen(args)
with background_ping.stdout:
for line in iter(background_ping.stdout.readline)
process(line)
这意味着我仍然在主线程上运行的子进程中运行ping函数。实际上这意味着我不断看到ping的输出,我认为不应该这样。在这种情况下,我如何让这个操作在后台运行,并在其他一些事情发生时不断轮询?我想要的是这个
def ping_subprocess()
ping the server in a subprocess
return a string whenever there is output
def read_ping_subprocess_output()
current_ping = poll(ping_subprocess.output)
eval(current_ping)
ping_subprocess()
read_ping_subprocess_output() # <-- how do i get to this code
但问题是ping_subprocess()
方法将等到进程输出完成,从技术上讲,这个方法从未发生过,因为ping进程无限期地运行,只有当我故意给它一些其他信号时才会停止我打算稍后编码。
如何使子进程方法在进程启动后返回而不是等待它结束以便我可以读取它的输出?我确定另一个选择是不断将ping函数的输出附加到文件中(在合理范围内)并与另一个程序同时读取该文件,但我不确定它是否是最好的想法。
所以就线程而言(如果需要),这会怎么样?我听说混合线程和子进程是一个坏主意。