繁体   English   中英

Python子进程有效地检查子进程是否终止

[英]Python Subprocess efficiently check if child process terminated

我正在使用子进程运行此bash cmd,以在远程系统中启动jmeter。

['java', '-server', '-XX:+HeapDumpOnOutOfMemoryError', '-Xms512m', '-Xmx512m', '-XX:+UseG1GC', 
'-XX:MaxGCPauseMillis=250', '-XX:G1ReservePercent=20', '-Djava.security.egd=file:/dev/urandom', 
'-Xms1024m', '-Xmx1024m', '-jar', '/jmeter/apache-jmeter-4.0/bin/ApacheJMeter.jar', '-n', 
'-t', '/code/jmx_file.jmx', '-JReplica_ID=1', '-JService_Name=execution-b063818a',
'-l', '/code/logs/logs.log']

现在我正在使用while loop来检查子进程是否终止以及是否终止了如下所示的刷新日志文件

sub_proc = subprocess.Popen(
                    bash_cmd,
                    stdout=proc_log,
                    stderr=proc_log
                )
# while the process is still running, dump the data to the file.
while sub_proc.poll() is None:
    proc_log.flush()
    os.fsync(proc_log)
sub_proc.wait()  

但是,这个while loop我的进程达到了100%的CPU利用率。

我想知道是否还有其他方法可以有效地检查子进程是否终止(如上),以减少CPU使用率。

将睡眠添加到您的while loop ,否则它将限制使用尽可能多的CPU:

from time import sleep
sub_proc = subprocess.Popen(
                    bash_cmd,
                    stdout=proc_log,
                    stderr=proc_log
                )
# while the process is still running, dump the data to the file.
while sub_proc.poll() is None:
    proc_log.flush()
    os.fsync(proc_log)
    sleep(0.05) #change to acceptable value
sub_proc.wait()  

您正在以正确的方式检查其与sub_proc.poll() is None一起运行sub_proc.poll() is None

暂无
暂无

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

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