66logger = 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 )
0 commit comments