Skip to content

Commit 7cb4d06

Browse files
committed
Complying with @exhuma's comments/requests
1 parent d98103d commit 7cb4d06

File tree

3 files changed

+12
-17
lines changed

3 files changed

+12
-17
lines changed

CHANGELOG

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
1-
1.3.1
2-
- Moved util.genmatrix() into matrix.ItemItemMatrix - more complex code
3-
deserves its own submodule
4-
5-
1.3.0
6-
- Multiprocessing for genmatrix
7-
81
1.2.0
92
- Split up one big file into smaller more logical sub-modules
103

cluster/matrix.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
logger = logging.getLogger(__name__)
77

88

9-
class ItemItemMatrix(object):
9+
class Matrix(object):
1010
"""Object representation of the item-item matrix
1111
"""
1212

@@ -43,7 +43,6 @@ def __init__(self, data, combinfunc, symmetric=False, diagonal=None, num_process
4343
if self.use_multiprocessing:
4444
self.task_queue = Queue()
4545
self.done_queue = Queue()
46-
self.genmatrix()
4746

4847
def worker(self):
4948
"""Multiprocessing task function run by worker processes
@@ -52,8 +51,10 @@ def worker(self):
5251
for task in iter(self.task_queue.get, 'STOP'):
5352
col_index, item, item2 = task
5453
result = (col_index, self.combinfunc(item, item2))
54+
self.task_queue.task_done()
5555
self.done_queue.put(result)
5656
tasks_completed += 1
57+
self.task_queue.task_done()
5758
logger.info("Worker %s performed %s tasks",
5859
current_process().name,
5960
tasks_completed)
@@ -66,7 +67,7 @@ def genmatrix(self):
6667

6768
if self.use_multiprocessing:
6869
logger.info("Spinning up %s workers", self.num_processes)
69-
processes = [Process(target=self.worker) for i in xrange(self.num_processes)]
70+
processes = [Process(target=self.worker) for i in range(self.num_processes)]
7071
[process.start() for process in processes]
7172

7273
for row_index, item in enumerate(self.data):
@@ -96,6 +97,7 @@ def genmatrix(self):
9697
# blocking operation)
9798
if num_tasks_queued > self.num_processes:
9899
col_index, result = self.done_queue.get()
100+
self.done_queue.task_done()
99101
row[col_index] = result
100102
num_tasks_completed += 1
101103
else:
@@ -114,20 +116,21 @@ def genmatrix(self):
114116
# Grab the remaining worker task results
115117
while num_tasks_completed < num_tasks_queued:
116118
col_index, result = self.done_queue.get()
119+
self.done_queue.task_done()
117120
row[col_index] = result
118121
num_tasks_completed += 1
119122

120-
row_indexed = [row[index] for index in xrange(len(self.data))]
123+
row_indexed = [row[index] for index in range(len(self.data))]
121124
self.matrix.append(row_indexed)
122125

123126
if self.use_multiprocessing:
124127
logger.info("Stopping/joining %s workers", self.num_processes)
125-
[self.task_queue.put('STOP') for i in xrange(self.num_processes)]
128+
[self.task_queue.put('STOP') for i in range(self.num_processes)]
126129
[process.join() for process in processes]
127130

128131
logger.info("Matrix generated")
129132

130-
def printmatrix(self):
133+
def __str__(self):
131134
"""
132135
Prints out a 2-dimensional list of data cleanly.
133136
This is useful for debugging.
@@ -141,8 +144,7 @@ def printmatrix(self):
141144
for col in self.data:
142145
for cell in col:
143146
maxlen = max(len(str(cell)), maxlen)
144-
# print data
145147
format = " %%%is |" % maxlen
146148
format = "|" + format * colcount
147-
for row in self.data:
148-
print format % tuple(row)
149+
rows = [format % tuple(row) for row in self.data]
150+
return "\n".join(rows)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
setup(
1212
name='cluster',
13-
version='1.3.1',
13+
version='1.2.0',
1414
author='Michel Albert',
1515
author_email='[email protected]',
1616
url='http://python-cluster.sourceforge.net/',

0 commit comments

Comments
 (0)