1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import os
from os import path as osp
import time
try:
from matplotlib import pyplot
except ImportError:
matplotlib = None
import psutil
ASSETS = os.environ.get("VIDEOSTITCH_ASSETS")
class VsProcess(psutil.Process):
def __init__(self, name):
res = None
for process in psutil.process_iter():
if process.name() == name:
if res is None:
res = process
else:
raise Exception("multiple processes {}".format(name))
if res is None:
raise Exception("process {} not found".format(name))
else:
super(VsProcess, self).__init__(res.pid)
def try_cpu_ram(self):
cpu = None
ram = None
try:
cpu = self.get_cpu_percent()
ram = self.get_memory_percent()
except psutil.NoSuchProcess:
pass
return cpu, ram
def monitor(self, interval=1):
cpu = []
ram = []
if self.try_cpu_ram() is not None:
start = time.time()
intermediate = start
while True:
while time.time() - intermediate < interval:
time.sleep(0.01)
intermediate += interval
tmpcpu, tmpram = self.try_cpu_ram()
if tmpcpu is None or tmpram is None:
break
cpu += [tmpcpu]
ram += [tmpram]
return cpu, ram
def exec_and_monitor(program, args, verbose=False, **kwargs):
start = time.time()
if not verbose:
args += " >> vscmd.log 2>&1"
os.spawnv(os.P_NOWAIT, '/bin/sh', ['sh', '-c', " ".join([program, args])])
time.sleep(0.01)
process = VsProcess(osp.basename(program))
cpu, ram = process.monitor(**kwargs)
return cpu, ram, time.time() - start
def exec_and_plot(program, args, verbose=False, **kwargs):
cpu, ram, _ = exec_and_monitor(program, args, verbose, **kwargs)
xtime = range(len(cpu))
pyplot.plot(xtime, cpu, 'g-', xtime, ram, 'b-')
pyplot.show()