[Twisted-web] Newbie question about chaining deffereds

Reza Lotun rlotun at gmail.com
Sun Dec 20 11:27:08 EST 2009


Hi Igor,

> I need to download a videofile, a thumbnail to it, process that
> videofile, and after the processing is finished, process the thumbnail
> with the result of processing the video.
>
> [SNIP]
>
> url = 'http://..../video.flv'
> filename = 'video.flv'
> video_deffered = downloadPage(url, filename)
> video_deffered.addCallback(process_video, filename) => process_video
> returns video_id
>
> url = 'http://..../thumbnail.jpg'
> filename = 'thumbnail.jpg'
> image_deffered = downloadPage(url, filename)
>
> image_deffered.chainDeffered(video_deffered)
> image_deffered.addCallback(process_image, filename) =< video_id needed here

As far as I understand you want to:
1. Get the videofile - represented by video_deferred
2. Process the videofile after it's downloaded (the function process_video)
3. Get the thumbnail in parallel - image_deferred
4. Do a final processing *after* step 2 and step 3 (process_image)

What you want to do is fire off video_deferred and image_deferred as
you do immediately, but put the two deferreds in a DeferredList. What
this allows you to do is attach a callback that will only fire when
*both* jobs have been completed. The addCallback on that deferred list
will be process_image.

To run jobs in threads, please take a look a
twisted.internet.threads.deferToThread.

Hope that helps.

Reza


-- 
Reza Lotun
mobile: +44 (0)7521 310 763
email:  rlotun at gmail.com
work:   reza at tweetdeck.com
twitter: @rlotun



More information about the Twisted-web mailing list