Part of twisted.flow.threads View Source View In Hierarchy
A stage which runs a blocking iterable in a separate thread
This stage tunnels output from an iterable executed in a separate thread to the main thread. This process is carried out by a result buffer, and returning Cooperate if the buffer is empty. The wrapped iterable's __iter__ and next() methods will only be invoked in the spawned thread.
This can be used in one of two ways, first, it can be extended via inheritance; with the functionality of the inherited code implementing next(), and using init() for initialization code to be run in the thread.
If the iterable happens to have a chunked attribute, and that attribute is true, then this wrapper will assume that data arrives in chunks via a sequence instead of by values.
For example:
   from __future__ import generators
   from twisted.internet import reactor, defer
   from twisted.flow import flow
   from twisted.flow.threads import Threaded
   def countSleep(index):
       from time import sleep
       for index in range(index):
           sleep(.3)
           print "sleep", index
           yield index
   def countCooperate(index):
       for index in range(index):
           yield flow.Cooperate(.1)
           print "cooperate", index
           yield "coop %s" % index
   d = flow.Deferred( flow.Merge(
           Threaded(countSleep(5)),
           countCooperate(5)))
   def prn(x):
       print x
       reactor.stop()
   d.addCallback(prn)
   reactor.run()
| Class | Instruction | Undocumented | 
| Method | __init__ | Undocumented | 
| Method | _process_result | Undocumented | 
| Method | _stopping | Undocumented | 
| Method | _process | Undocumented | 
| Method | _yield | executed during a yield statement by previous stage | 
Inherited from Stage:
| Method | __iter__ | Undocumented | 
| Method | next | return current result | 
executed during a yield statement by previous stage
This method is private within the scope of the flow module, it is used by one stage in the flow to ask a subsequent stage to produce its value. The result of the yield is then stored in self.result and is an instance of Failure if a problem occurred.