有效地衡量一个过程持续了多长时间 运行
Efficiently measuring how long a process has been running
我正在尝试计算进程的运行时间(游戏中的跟踪时间)。以下代码有效,但使 CPU 一直处于忙碌状态。
我想这与 while 循环不断轮询以检查进程是否仍在 运行 有关。有没有更有效的实现方法?
def is_running(process_name):
try:
subprocess.check_output(['pidof', process_name])
return True
except subprocess.CalledProcessError:
return False
def monitor_process(process_name):
while True:
if is_running(process_name):
start_time = time.time()
while is_running(process_name):
pass
return round(time.time() - start_time, 3)
else:
pass
您应该使用 psutil(python 系统和进程实用程序)
搜索 运行 进程。
请注意 pidof
命令仅适用于基于 Linux 的系统,
Unix 用户可以尝试 ps
命令或 pgrep
命令来查找 运行 程序的 pid。
Windows.
上不存在此命令
import psutil
def filter_by_name(process_name):
for process in psutil.process_iter():
try:
if process.name() == process_name:
yield process
except psutil.NoSuchProcess:
pass
def is_running(process_name):
return any(p for p in filter_by_name(process_name))
process_name = "Mail"
if is_running(u"{0}".format(process_name)):
print(u"{0} is running.".format(process_name))
else:
print(u"Bad new, {0}'s dead!".format(process_name))
使用无限循环很耗资源
并检查给定进程是否为 运行。真是低效!
至少,使用 time.sleep(sec)
在每次迭代之间做一个小的停顿。
再说一遍,psutil
可以帮到你!
如果您使用 psutil.process_iter()
或我们的
filter_by_name()
函数,可以等待进程终止。
只需使用 wait()
方法和 timeout
(以秒为单位)。
然后,当该过程完成时,
您可以减去当前时间和 create_time()
以获得处理持续时间(以秒为单位)。
import time
for p in filter_by_name(process_name):
p.wait(timeout=10)
print(time.time() - p.create_time())
注意:按名称搜索进程可能会导致重复。
我正在尝试计算进程的运行时间(游戏中的跟踪时间)。以下代码有效,但使 CPU 一直处于忙碌状态。 我想这与 while 循环不断轮询以检查进程是否仍在 运行 有关。有没有更有效的实现方法?
def is_running(process_name):
try:
subprocess.check_output(['pidof', process_name])
return True
except subprocess.CalledProcessError:
return False
def monitor_process(process_name):
while True:
if is_running(process_name):
start_time = time.time()
while is_running(process_name):
pass
return round(time.time() - start_time, 3)
else:
pass
您应该使用 psutil(python 系统和进程实用程序) 搜索 运行 进程。
请注意 pidof
命令仅适用于基于 Linux 的系统,
Unix 用户可以尝试 ps
命令或 pgrep
命令来查找 运行 程序的 pid。
Windows.
import psutil
def filter_by_name(process_name):
for process in psutil.process_iter():
try:
if process.name() == process_name:
yield process
except psutil.NoSuchProcess:
pass
def is_running(process_name):
return any(p for p in filter_by_name(process_name))
process_name = "Mail"
if is_running(u"{0}".format(process_name)):
print(u"{0} is running.".format(process_name))
else:
print(u"Bad new, {0}'s dead!".format(process_name))
使用无限循环很耗资源
并检查给定进程是否为 运行。真是低效!
至少,使用 time.sleep(sec)
在每次迭代之间做一个小的停顿。
再说一遍,psutil
可以帮到你!
如果您使用 psutil.process_iter()
或我们的
filter_by_name()
函数,可以等待进程终止。
只需使用 wait()
方法和 timeout
(以秒为单位)。
然后,当该过程完成时,
您可以减去当前时间和 create_time()
以获得处理持续时间(以秒为单位)。
import time
for p in filter_by_name(process_name):
p.wait(timeout=10)
print(time.time() - p.create_time())
注意:按名称搜索进程可能会导致重复。