/
dir.py
122 lines (94 loc) · 3.09 KB
/
dir.py
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import sys, os, json
from result import Result
import datetime
from utils import touch
import utils
class Dir:
def arg_id(self, arg):
result = self.name
for k, v in arg:
result = result + '-' + k + '-' + str(v)
return result
def write_time(self, t):
f = open('time-used', 'w')
f.write(str(t))
f.close()
def read_time(self):
f = open('time-used', 'r')
t = float(f.read())
f.close()
return t
def __init__(self, conf):
self.conf = conf
self.name = conf["name"]
if not os.path.exists(self.name):
os.mkdir(self.name)
os.chdir(self.name)
if not os.path.exists('time-used'):
self.write_time(0)
self.start_time = datetime.datetime.now()
self.time_used = self.read_time()
self.result = Result(conf)
self.refresh()
def read(self, arg):
newresult = {}
f = open(self.arg_id(arg), 'r')
for line in f.readlines():
line = line.strip().split()
if len(line) % 2 == 1 or len(line) < 2:
# Fail
utils.fail(self.arg_id(arg))
f.close()
return
new_key = {k : v for k, v in arg}
# parse line
for i in xrange(0, len(line)-2, 2):
i_name = line[i]
i_value = float(line[i+1])
new_key[i_name] = i_value
new_key["name"] = line[-2]
newresult[utils.dict2tuple(new_key)] = float(line[-1])
# Merge result with newresult
for k in newresult.keys():
self.result[k] = newresult[k]
f.close()
def refresh(self):
# Load data
self.finished_tasks = 0
for arg in self.result.args():
if utils.finished(self.arg_id(arg)):
if not utils.failed(self.arg_id(arg)):
self.read(arg)
self.finished_tasks += 1
self.total_tasks = len(self.result.args())
t = datetime.datetime.now()
td = t - self.start_time
self.start_time = t
self.time_used += td.seconds * 1e6 + td.microseconds
self.write_time(self.time_used)
def write_status(self, cr = True):
percentage = self.finished_tasks * 100 / self.total_tasks
content = '%s: %d/%d (%d%%)' \
% (self.name, self.finished_tasks, self.total_tasks, percentage)
s = self.time_used / 1e6
m = int(s/60) % 60
h = int(s/3600) % 24
d = int(s/86400)
s = s % 60
if d==0:
content += ' Time: %02d:%02d:%02d' % (h, m, s)
else:
content += ' Time: %d d %02d:%02d:%02d' % (d, h, m, s)
if cr:
content = '\r' + content
sys.stdout.write(content)
sys.stdout.flush()
def start(self, arg):
f = open(self.arg_id(arg) + '.todo', 'w')
content = json.dumps(arg)
f.write(content)
f.close()
def get_result(self):
return self.result
if __name__ == '__main__':
touch('test')