So that child processes can successfully import that module. The followingĮxample demonstrates the common practice of defining such functions in a module Parallelizing the execution of a function across multiple input values,ĭistributing the input data across processes (data parallelism). Pool object which offers a convenient means of The multiprocessing module also introduces APIs which do not haveĪnalogs in the threading module. Leverage multiple processors on a given machine. To this, the multiprocessing module allows the programmer to fully Offers both local and remote concurrency, effectively side-stepping the Multiprocessing is a package that supports spawning processes using anĪPI similar to the threading module. WebAssembly platforms for more information. Threads will take turns dequeuing URLs to download them.This module does not work or is not available on WebAssembly platforms The loop below willĬontinue to add items until the feed is exhausted, and the worker Should pick it up and start downloading it. As soonĪs the first URL is added to the queue, one of the worker threads The next step is to retrieve the feed contents (using Mark Pilgrim’sįeedparser module) and enqueue the URLs of the enclosures. Safe to start the threads before there is anything in the queue. Url = q.get() until the queue has something to return, so it is Notice that downloadEnclosures() will block on the statement Once the threads’ target function is defined, we can start the worker Sleeping a variable amount of time, depending on the thread id. In this example, we simulate a download delay by To actuallyĭownload the enclosure, you might use urllib or Illustration purposes this only simulates the download. Will run in the worker thread, processing the downloads. Next, we need to define the function downloadEnclosures() that For ourĮxample we hard code the number of threads to use and the list of URLs Normally these wouldĬome from user inputs (preferences, a database, whatever). join () print '*** Done'įirst, we establish some operating parameters. print '*** Main thread waiting' enclosure_queue. put ( enclosure ) # Now wait for the queue to be empty, indicating that we have # processed all of the downloads. get ( 'enclosures', ): print 'Queuing:', enclosure enclosure_queue. parse ( url, agent = 'fetch_podcasts.py' ) for entry in response : for enclosure in entry. for url in feed_urls : response = feedparser. start () # Download the feed(s) and put the enclosure URLs into # the queue. task_done () # Set up some threads to fetch the enclosures for i in range ( num_fetch_threads ): worker = Thread ( target = downloadEnclosures, args = ( i, enclosure_queue ,)) worker. get () print ' %s : Downloading:' % i, url # instead of really downloading the URL, # we just pretend and sleep time. """ while True : print ' %s : Looking for the next enclosure' % i url = q. These daemon threads go into an infinite loop, and only exit when the main thread ends. It processes items in the queue one after another. feed_urls = def downloadEnclosures ( i, q ): """This is the worker thread function. # System modules from Queue import Queue from threading import Thread import time # Local modules import feedparser # Set up some global variables num_fetch_threads = 2 enclosure_queue = Queue () # A real app wouldn't use hard-coded data.
0 Comments
Leave a Reply. |
Details
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |