38 lines
		
	
	
		
			942 B
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			942 B
		
	
	
	
		
			Python
		
	
	
	
"""
 | 
						|
example
 | 
						|
 | 
						|
reading results from possibly blocking code running in sub processes. 
 | 
						|
"""
 | 
						|
import py
 | 
						|
 | 
						|
NUM_PROCESSES = 5
 | 
						|
 | 
						|
channels = []
 | 
						|
for i in range(NUM_PROCESSES):
 | 
						|
    gw = py.execnet.PopenGateway() # or use SSH or socket gateways 
 | 
						|
    channel = gw.remote_exec("""
 | 
						|
        import time
 | 
						|
        secs = channel.receive()
 | 
						|
        time.sleep(secs)
 | 
						|
        channel.send("waited %d secs" % secs)
 | 
						|
    """)
 | 
						|
    channels.append(channel)
 | 
						|
    print "*** instantiated subprocess", gw
 | 
						|
 | 
						|
mc = py.execnet.MultiChannel(channels)
 | 
						|
queue = mc.make_receive_queue()
 | 
						|
 | 
						|
print "***", "verifying that timeout on receiving results from blocked subprocesses works"
 | 
						|
try:
 | 
						|
    queue.get(timeout=1.0) 
 | 
						|
except Exception:
 | 
						|
    pass
 | 
						|
 | 
						|
print "*** sending subprocesses some data to have them unblock"
 | 
						|
mc.send_each(1) 
 | 
						|
 | 
						|
print "*** receiving results asynchronously"
 | 
						|
for i in range(NUM_PROCESSES):
 | 
						|
    channel, result = queue.get(timeout=2.0)
 | 
						|
    print "result", channel.gateway, result
 |