Hello!

I searched and found posts that were similar to mine, but either I couldn't 
understand the answer or the problem was different enough that the answers 
weren't helpful - please excuse me if this seems to repeat a problem already 
answered.

I am trying to run a series of scripts on the Amazon cloud, multiprocessing on 
the 32 cores of our AWS instance.  The scripts run well, and the queuing seems 
to work BUT, although the processes run to completion, the script below that 
runs the queue never ends.  I have tried Queue and JoinableQueue and the same 
thing happens for both.

I've simplified the example below a bit, just having it print, but the problem 
is the same.  Can anyone see what I have done wrong here?

Thanks!

Jessica

----------------

#!/usr/bin/env python
import os

from multiprocessing import Lock, Process, Queue, current_process, 
freeze_support,JoinableQueue
from Pipeline import Pipeline
import time

def worker(done_queue,work_queue):
        try:
                for f in iter(work_queue.get, 'STOP'):
                        ###########################################
                        # Normally I call a complicated series of scripts here 
but to test, just print  
                        print f
                        ###########################################     
                        done_queue.put("%s - %s got %s." % 
(current_process().name, f, f))
                        log("%s - %s got %s." % (current_process().name, f, 
f),f)
                        work_queue.task_done()
        except Exception, e:
                done_queue.put("%s failed on %s with: %s" % 
(current_process().name, f, e.message))
                log("%s failed on %s with: %s" % (current_process().name, f, 
e.message),f)
                work_queue.task_done()
        done_queue.put('STOP')

        return


def log(string,f):
        outfile = open('queue_taxon_logfile' + str(f),'a')
        outfile.write(str(string) + '\n')
        outfile.close()

def main():

        workers = 32 #change if fewer processors are available
        work_queue = JoinableQueue(810) #change if more than 810 taxa
        done_queue = JoinableQueue(810)
        processes = []
        
        print "1 it  gets here"
        for f in range(64):
                work_queue.put(f)       
        work_queue.put('STOP')
        
        print "2 it  gets here"
        
        for w in xrange(workers):
                p = Process(target=worker, args=(done_queue,work_queue))
                p.start()
                processes.append(p)

        print "3  it  gets here"
        for p in processes:
                print p                     # it only prints once - 
<Process(Process-1, started)>
                p.join()
                
        print "it never gets here"
        for status in iter(done_queue.get, 'STOP'):
                print status


if __name__ == '__main__':
    main()
    
   
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to