Decorator Recipe: Custom Event Binding

Step 2

Now we would like to support multiple callback functions:

@downloader.done
def _(count, time_elapsed):
    print "Fetched", count, "files in", time_elapsed, "seconds"

@downloader.done
def _(count, time_elapsed):
    print '%s downloaded in %0.3f minutes' % (count, time_elapsed / 60.0)

Modify the methods in class Downloader to support this.

from threading import Thread
import time

class Downloader(object):
    """Write the methods for this class"""

if __name__ == '__main__':
    url_list = xrange(1, 10)
    downloader = Downloader(url_list)

    @downloader.done
    def _(count, time_elapsed):
        print "Fetched", count, "files in", time_elapsed, "seconds"

    @downloader.done
    def _(count, time_elapsed):
        print '%s downloaded in %0.3f minutes' % (count, time_elapsed / 60.0)

    downloader.start_downloads()

    print 'Waiting for the result...'

Expected result:

Waiting for the result...
Downloading 1
Downloading 2
Downloading 3
Downloading 4
Downloading 5
Downloading 6
Downloading 7
Downloading 8
Downloading 9
Fetched 9 files in 2.71900010109 seconds
9 downloaded in 0.045 minutes

Solution: solutions/downloader2.py

Go to next step