检查ping到服务器的子进程或线程?

2024-04-26 18:36:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我以前从未使用过多线程进程,也从未尝试过创建多线程进程,而且我对子进程的编码也不在行,但我从概念上理解了分叉是什么,而且从本质上讲也不难理解。你知道吗

我要做的是跟踪网络上的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进程无限期地运行,并且只有在我有目的地给它一些我计划稍后编码的其他信号时才会停止。你知道吗

如何使subprocess方法在进程启动时返回,而不是等待它结束,以便读取其输出?我确信另一个选择是不断地将ping函数的输出附加到一个文件中(在合理的范围内),并与另一个程序同时读取该文件,但我不确定这是否是最好的主意。你知道吗

那么在线程方面(如果需要的话),这会是怎样的呢?我听说混合线程和子进程是个坏主意。你知道吗


Tags: 方法函数in编码readoutput进程def