Skip to content

Commit 3750d54

Browse files
committed
Cleaning output, adding queuing system, finilazing
1 parent e9f2821 commit 3750d54

File tree

7 files changed

+59
-29
lines changed

7 files changed

+59
-29
lines changed

net/__main__.py

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
11
from net import lib
22
from sys import argv
3+
from time import time
4+
from json import dumps
35
from SocketServer import TCPServer, BaseRequestHandler
46

57

68
class Memory(object):
79
score = None
810
graph = None
9-
name = None
1011
weight = None
1112
complete = False
13+
start = None
1214

1315
def __repr__(self):
1416
return str(self.__dict__)
1517

1618

1719
class MyServer(TCPServer):
1820
data = dict()
21+
processing = 1
1922

2023
def save(self):
2124
# TODO: store data to disk
22-
pass
25+
print dumps(
26+
{
27+
key: value.__dict__
28+
for key, value in self.data.iteritems()
29+
}, indent=4
30+
)
2331

2432

2533
class MyTCPHandler(BaseRequestHandler):
@@ -30,16 +38,25 @@ def send(self, msg):
3038
lib.send(self.request, msg)
3139

3240
def handle_start(self):
33-
name = argv[1] if len(argv) > 1 else None
41+
name = None
42+
if len(argv) > self.server.processing:
43+
name = argv[self.server.processing]
3444
weight = 0
3545
if name:
3646
weights = [1.2, 1.1, 1.08, 1.04, 1]
3747
try:
3848
memory = self.server.data.setdefault(name, Memory())
49+
if memory.complete:
50+
# If we are done, move on
51+
self.server.processing += 1
52+
return self.handle_start()
53+
3954
weight = max([
4055
w for w in weights
4156
if not memory.weight or memory.weight > w
4257
])
58+
if not memory.start:
59+
memory.start = time()
4360
except Exception:
4461
name = None
4562
self.send((name, weight))
@@ -54,11 +71,12 @@ def handle_end(self):
5471
data.score = score
5572
data.graph = graph
5673
data.weight = weight
57-
data.name = name
5874
print 'New best score of {} for {}'.format(score, name)
5975
if weight <= 1:
6076
print 'Completed Search on {}'.format(name)
6177
data.complete = True
78+
data.duration = time() - data.start
79+
del data.start
6280
self.server.save()
6381
else:
6482
print 'Worse score of {} for {}'.format(score, name)
@@ -78,7 +96,10 @@ def handle(self):
7896
'P': self.handle_ping
7997
}
8098
command = self.request.recv(1)
81-
print 'Client {1}:{2} said "{0}"'.format(command, *self.client_address)
99+
if command != 'P':
100+
print 'Client {1}:{2} said "{0}"'.format(
101+
command, *self.client_address
102+
)
82103
if command in obj:
83104
obj.get(command, lambda: 0)()
84105
else:
@@ -87,4 +108,9 @@ def handle(self):
87108
if __name__ == "__main__":
88109
server = MyServer((lib.HOST, lib.PORT), MyTCPHandler)
89110
print 'Serving at {}:{}'.format(*server.server_address)
90-
server.serve_forever()
111+
try:
112+
server.serve_forever()
113+
except KeyboardInterrupt:
114+
print 'Killing server'
115+
server.server_close()
116+
server.shutdown()

src/__main__.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@ def __init__(self, name, weight, monitor):
1515
self.score = None
1616

1717
def run(self):
18-
score, graph = procedure(self.name, self.weight, self.monitor)
18+
score, graph = procedure(
19+
self.name, self.weight, self.monitor, debug=False
20+
)
1921
if score:
2022
self.score = score
2123
lib.end(self.name, self.weight, score, graph)
2224

2325

2426
def network():
25-
delay = models.Delay()
27+
delay = models.Delay(cap=5)
2628
while True:
2729
try:
2830
name, weight = lib.start()
@@ -35,7 +37,7 @@ def network():
3537
print 'Search "{}" with max weight of {:.6f}'.format(name, weight)
3638

3739
# Fire up process threads with shared access to monitor
38-
monitor = Monitor()
40+
monitor = Monitor(name)
3941
monitor.start()
4042
threads = []
4143
thread_count, base = cpu_count(), 1

src/base.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,26 @@
55
# from parents import ParentBuilder
66

77

8-
def procedure(name, weight=1, monitor=None):
9-
timer = Timer('Fetching Variables')
8+
def procedure(name, weight=1, monitor=None, debug=True):
9+
if debug:
10+
timer = Timer('Fetching Variables')
1011
data = BNSearch(name)
11-
print timer.stop()
12-
13-
timer = Timer('Calculate Scores')
12+
if debug:
13+
print timer.stop()
14+
timer = Timer('Calculate Scores')
1415
data.score = ScoreBuilder(data.data, data.variables)(data.name)
15-
print timer.stop()
16+
if debug:
17+
print timer.stop()
1618

1719
# timer = Timer('Build Parent Graphs')
1820
# data.best_score = ParentBuilder(data)()
1921
# print timer.stop()
2022

2123
if not monitor:
22-
monitor = Monitor()
24+
monitor = Monitor(name)
2325

24-
timer = Timer('Search')
26+
if debug:
27+
timer = Timer('Search')
2528
killed = False
2629
score = 1e99
2730
try:
@@ -32,13 +35,11 @@ def procedure(name, weight=1, monitor=None):
3235
)
3336
killed = True
3437
finally:
35-
print timer.stop()
38+
if debug:
39+
print timer.stop()
3640

3741
if killed:
3842
return
3943

40-
timer = Timer('Rebuild graph')
4144
graph = data.build_graph()
42-
print timer.stop()
43-
4445
return score, graph

src/data/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ def __init__(self, name='scale'):
6868
new_data.append(new_item)
6969
self.data = new_data
7070
self.variables = sorts
71-
for variable in self.variables:
72-
print '{}: {}'.format(variable.name, repr(variable.domain))
71+
# for variable in self.variables:
72+
# print '{}: {}'.format(variable.name, repr(variable.domain))
7373

7474

7575
def is_num(test):

src/monitor.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33

44

55
class Monitor(Thread):
6-
def __init__(self):
6+
def __init__(self, name):
77
super(Monitor, self).__init__()
8+
self.name = name
89
self.complete = False
910
self.score = 1e9
1011
self.best = 2
@@ -20,6 +21,6 @@ def run(self):
2021
self.event.wait(10)
2122

2223
def stop(self):
23-
print 'Killing monitor'
24+
# print 'Killing monitor'
2425
self.event.set()
2526
self.join()

src/scores.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def __call__(self, name):
5252
path.dirname(__file__), 'data', name, '{}.score.p'.format(name)
5353
))
5454
if path.isfile(file_path):
55-
print 'Found Generated Scores - Loading'
55+
# print 'Found Generated Scores - Loading'
5656
with open(file_path, 'rb') as f:
5757
self.score.cache = pickle.load(f)
5858
else:

src/search.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@ def search(self, weight=1, monitor=False):
3131
open_set = PriorityQueue()
3232
closed_set = set()
3333

34-
print 'Beginning Search'
34+
# print 'Beginning Search'
3535
variables = set(self.variables)
3636
open_set.put((1, frozenset()))
3737
counter = 0
3838
while not open_set.empty() and not monitor.complete:
3939
counter += 1
4040
U = open_set.get()[1]
4141
if U == frozenset(self.variables):
42-
print 'Number of expansions:', counter
43-
print 'The best score is', self.base_score.get(U)
42+
# print 'Number of expansions:', counter
43+
# print 'The best score is', self.base_score.get(U)
4444
return self.base_score.get(U)
4545
closed_set.add(frozenset(U))
4646
for X in variables.difference(U):

0 commit comments

Comments
 (0)