我正在运行这个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
一起运行。