Re: Newbie question about chaining deffereds

Reza Lotun <[email protected]>
Newsgroups gmane.comp.python.twisted.web
Message-ID <[email protected]>
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:  [email protected]
work:   [email protected]
twitter: @rlotun
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.