2 # -*- coding: iso-8859-1 -*-
6 import sys, threading, time
9 # We should ignore SIGPIPE when using pycurl.NOSIGNAL - see
10 # the libcurl tutorial for more info.
13 from signal import SIGPIPE, SIG_IGN
14 signal.signal(signal.SIGPIPE, signal.SIG_IGN)
19 class Test(threading.Thread):
20 def __init__(self, url, ofile):
21 threading.Thread.__init__(self)
22 self.curl = pycurl.Curl()
23 self.curl.setopt(pycurl.URL, url)
24 self.curl.setopt(pycurl.WRITEDATA, ofile)
25 self.curl.setopt(pycurl.FOLLOWLOCATION, 1)
26 self.curl.setopt(pycurl.MAXREDIRS, 5)
27 self.curl.setopt(pycurl.NOSIGNAL, 1)
36 # Read list of URIs from file specified on commandline
38 urls = open(sys.argv[1]).readlines()
40 # No file was specified, show usage string
41 print "Usage: %s <file with uris to fetch>" % sys.argv[0]
44 # Initialize thread array and the file number
48 # Start one thread per URI in parallel
51 f = open(str(fileno), "wb")
54 threads.append((t, f))
56 # Wait for all threads to finish
57 for thread, file in threads:
61 print "\n** Multithreading, %d seconds elapsed for %d uris" % (int(t2-t1), len(urls))
63 # Start one thread per URI in sequence
67 f = open(str(fileno), "wb")
74 print "\n** Singlethreading, %d seconds elapsed for %d uris" % (int(t2-t1), len(urls))