|  | @@ -0,0 +1,50 @@
 | 
	
		
			
				|  |  | +#!/usr/bin/env python
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# https://twistedmatrix.com/documents/16.2.0/core/howto/defer.html
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +from twisted.internet import reactor, defer
 | 
	
		
			
				|  |  | +from twisted.internet.task import cooperate, coiterate
 | 
	
		
			
				|  |  | +from twisted.internet.defer import gatherResults
 | 
	
		
			
				|  |  | +from os.path import basename
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +from pprint import pprint
 | 
	
		
			
				|  |  | +LONG = 15
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def work_some(filename):
 | 
	
		
			
				|  |  | +    base = basename(filename)
 | 
	
		
			
				|  |  | +    with open(filename) as fp:
 | 
	
		
			
				|  |  | +        for line in fp:
 | 
	
		
			
				|  |  | +            if 'Sector' in line:
 | 
	
		
			
				|  |  | +                print("{0:15} : {1}".format(base, line.strip()))
 | 
	
		
			
				|  |  | +            yield
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def work_done(value):
 | 
	
		
			
				|  |  | +    print("Job done:", value)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# cooperate(work_some("../logs/proxy.log"))
 | 
	
		
			
				|  |  | +# cooperate(work_some("../logs/proxy.log.2019_11_30"))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +d1 = coiterate(work_some("../logs/proxy.log"))
 | 
	
		
			
				|  |  | +# There's no way this way to tell work_done what file is done.
 | 
	
		
			
				|  |  | +# d.addCallback(work_done)
 | 
	
		
			
				|  |  | +d1.addCallback(lambda ignore: work_done('proxy.log'))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +d2 = coiterate(work_some("../logs/proxy.log.2019_11_30"))
 | 
	
		
			
				|  |  | +# d.addCallback(work_done)
 | 
	
		
			
				|  |  | +d2.addCallback(lambda ignore: work_done('proxy.log.2019_11_30'))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Gather the results, stop the reactor when they are all done.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +gr = gatherResults([d1, d2])
 | 
	
		
			
				|  |  | +gr.addCallback(lambda ignore: reactor.stop())
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Not needed, we stop when we need to.  ;)
 | 
	
		
			
				|  |  | +# print("Stop the reactor in", LONG, "seconds...")
 | 
	
		
			
				|  |  | +# reactor.callLater(LONG, reactor.stop)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +print("starting the reactor")
 | 
	
		
			
				|  |  | +reactor.run()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +print("Reactor has been safely shutdown.  :P")
 |