[Twisted-web] using threads in twisted

Ivan bdfy at mail.ru
Mon Apr 18 06:36:50 EDT 2011


Thanks, but how to kill workers by timeout in this example ?


Fri, 15 Apr 2011 20:47:25 +1000 письмо от Stephen Thorne <stephen at thorne.id.au>:

> On 2011-04-15, Ivan wrote:
> > for example, I want to run two tasks ( using thread ), waiting while this
> tasks is end and after run  next several tasks
> > How to do this using twisted ? Any example ?
> > 
> > def task(n):
> >     sleep n
> > 
> > 1) 1,2 tasks begin  ( thread )
> > 2) waiting while all tasks is ends
> > 3) ...
> > 4) run 3,4,5,6,7 tasks ( thread )
> > 5) waiting while all tasks is ends
> 
> You can use a combination of deferToThread() and DeferredList() to do
> this. It's quite simple:
> 
> from twisted.internet import reactor
> from twisted.internet import threads
> from twisted.internet import defer
> 
> def worker(arg):
> print 'I do stuff in threads'
> return arg + 1
> 
> def first_round():
> print 'Starting workers'
> task1 = threads.deferToThread(worker, 1)
> task2 = threads.deferToThread(worker, 2)
> return defer.DeferredList([task1, task2])
> 
> def second_round(results):
> print 'result of first round is:', results
> l = []
> for x in range(10):
> l.append(threads.deferToThread(worker, x))
> return defer.DeferredList(l)
> 
> def report(results):
> print 'result of second round is:', results
> 
> def end(results):
> print results
> reactor.stop()
> 
> d = first_round()
> d.addCallback(second_round)
> d.addCallback(report)
> d.addBoth(end)
> 
> reactor.run()
> 
> -- 
> Regards,
> Stephen Thorne
> Development Engineer
> Netbox Blue


More information about the Twisted-web mailing list