如何检查并等待上一个文件完成并执行下一个文件

How to check and wait previous file is completed and execute next files

系统:Linux、Ubuntu

我有几个文件需要顺序执行(执行命令 iperf),我创建了一个 main.py 文件并导入了这些文件, 在所有 iperf 完成后,需要重置设置(文件:reset.py)。 而这些文件中的其中一个文件需要从头到尾在reset.py之前运行(以获取cpu日志),所以我使用后台执行,代码如下:

r = os.system('python3 getcpu.py &)
print(r)

问题是,我尝试控制计时器(例如:time.sleep() 或线程..等)无法使 reset.py 运行 在 getcpu.py 之后, 我如何检查文件 getcpu.py 是否已完成,然后 运行 下一个文件 (reset.py)?

我画的结构如下:

=====更新下面的代码和说明=====

B因为完整的代码有点长,我把关键点贴在这里。 我需要在运行所有iperf命令时获取cpu日志,我使用的是后台工作方式,这样程序就可以同步执行了。

from Modules.ConfigModule import *        # preset settings


def get_cpu():   # background execution

 r = os.system('python3 getcpu.py &') 
 print(r)

get_cpu()

from Iperf1 import *

from Iperf2 import *

from Iperf3 import *

from Iperf4 import *

from Modules.resetModule import *

下面的文件 getcpu.py 命令:

# SSH connection
stdin, stdout, stderr = ssh.exec_command('mpstat -P ALL 1400')
info = stdout.readlines()
print(info)
# I set 1400 sec. because I want to make sure get complete cpu report 

您可以尝试使用 subprocess.run() 而不是 os.system()。 它会阻止执行,直到进程完成。

import subprocess

r = subprocess.run(['python3', 'getcpu.py'])

print(r.returncode)

https://docs.python.org/3/library/subprocess.html#subprocess.run

根据新信息,您可以使用 psutil 包和线程自己编写分析器,如下所示:

import psutil
from threading import Thread
import time

class Profiler:
  def __init__(self):
    self.stop = False
    self.thread = Thread(target=self.do_profile)

  def profile_start(self):
    self.thread = Thread(target=self.do_profile)
    self.thread.start()

  def profile_stop(self):
    self.stop = True
    self.thread.join()

  def do_profile(self):
    while not self.stop:
      print(psutil.cpu_percent())
      time.sleep(0.1) #delay between cpu collections
    self.stop = False


p = Profiler()

p.profile_start()

print("Importing Module 1")
from pandas import *

print("Importing Module 2")
from PySide2 import *

print("Importing Module 3")
from matplotlib import *

p.profile_stop()

这会打印

Importing Module 1
0.0
23.2
40.4
14.3
32.1
10.7
12.5
7.1
10.5
14.0
7.1
14.3
7.0
26.3
14.0
8.9
Importing Module 2
7.0
26.8
7.1
16.3
17.2
10.7
18.8
17.9
21.4
14.3
17.9
21.4
0.0
5.4
10.7
12.5
10.7
22.8
10.7
8.9
22.8
Importing Module 3
10.5
21.1

当然,您可以编辑 do_profile 函数以根据需要格式化输出。我选择获得 CPU 百分比。但还有其他统计数据。 看这里:https://pypi.org/project/psutil/

希望对您有所帮助!