2012-03-31 6 views
1

Я использую приведенный ниже код для словаря как 100 000 ключей и значений ... Я хотел сделать его более быстрым, выполнив многопроцессорность/многопоточность, поскольку каждый цикл не зависит от другого цикла. Может кто-нибудь сказать мне, как применять и который один (многопроцессорная/многопоточность) является более подходящим для такого подходаКак использовать многопроцессорную/многопоточность в моем коде?

from urlparse import urlparse 

ProcessAllURLs(URLs) 

ProcessAllURLs(URLs) 
def ProcessAllURLs(URLs): 
    for eachurl in URLs: 
      x=urlparse(eachurl) 
      print eachurl.netloc 

Благодаря

ответ

1

Я бы рекомендовал Python's multiprocessing library. В частности, исследование the section labeled "Using a pool of workers". Должно быть довольно быстро переработать вышеуказанный код, чтобы он использовал все доступные ядра вашей системы.

Один совет: не печатайте URL-адреса от работников пула. Лучше передать ответ на основной процесс и заполнить их там для печати. Печать из разных процессов приведет к большому количеству беспорядочного, несогласованного консольного вывода.

1

Многопроцессорная библиотека, вероятно, лучше всего подходит для вашего примера. Похоже, что ваш код может быть переписан, чтобы быть:

from urlparse import urlparse 

nprocs = 2 # nprocs is the number of processes to run 
ParsePool = Pool(nprocs) 
ParsedURLS = ParsePool.map(urlparse,URLS) 

Функция карты является такой же, как встроенной функции карты, но запускает отдельный процесс для каждого вызова функции.

См. http://docs.python.org/library/multiprocessing.html для получения дополнительной информации о многопроцессорной обработке.

Смежные вопросы