[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