def remote_thread_init(bar,finished,server,data_pack): try: remote = remote_exec.remote_exec(server[0],server[1],0,1) results = remote.run(data_pack) #assign the results from the returned data to the local individuals inputs = data_pack[0] old = inputs['sub_pop'] new = results['sub_pop'] for i in range(len(old)): old[i].__dict__.update(new[i].__dict__) except IndexError: print 'error in %s,%d' % server bar.enter() finished.post()
def remote_thread_eval(bar,finished,server,data_pack): #import tree try: #print '5',tree.ref() remote = remote_exec.remote_exec(server[0],server[1],0,1) results = remote.run(data_pack) #print '6',tree.ref() #assign the results from the returned data to the local individuals inputs = data_pack[0] old = inputs['sub_pop'] new = results['sub_pop'] for gnm in new: gnm.root.delete_circulars() del gnm.root #print '6.25',tree.ref() for i in range(len(old)): old[i].__dict__.update(new[i].__dict__) #print '6.5',tree.ref() except IndexError: print 'error in %s,%d' % server """ import sys #r = new[0].root #print 'ref count',sys.getrefcount(r) #print '6.75',tree.ref() #Huh??? Why do I need to delete the new genomes #individually here? Why aren't they garbage collected? indices = range(len(new)) indices.reverse() for i in indices: del new[i] #print 'ref count',sys.getrefcount(r) #print '6.8',tree.ref() #r.delete_circulars() #print 'ref count',sys.getrefcount(r) #print '6.9',tree.ref() #del r #print '6.95',tree.ref() """ bar.enter() finished.post()