2014-02-01 2 views
-1

Мне нужно скачать 2 разных файла в то время.Python MultiThreading For Downloads

import urllib 
urllib.urlretrieve('http://example.com/test1.zip', "C:\Test\test1.zip") 
urllib.urlretrieve('http://example.com/test2.zip', "C:\Test\test2.zip") 

Мне нужно загрузить их в то же время. Спасибо

+0

Вы можете попробовать следующее: http://docs.python.org/2/library/multiprocessing.html –

ответ

-1

Использовать multiprocessing.pool. Я использую его для этой цели много, и он отлично работает. Threading не принесет вам многого, поскольку Gil по-прежнему позволяет работать только за один раз

2

Для этого вы должны использовать стандартную нарезку python. Вам нужно будет создать класс, представляющий отдельный поток для каждой загрузки, а затем запустить каждый поток.

Что-то вроде:

import urllib 
from threading import Thread 

class Downloader(Thread): 
    def __init__(self, file_url, save_path): 
     self.file_url = file_url 
     self.save_path = save_path 


    def run(): 
     urllib.urlretrieve(self.file_url, self.file_path) 


Downloader('http://example.com/test1.zip', "C:\Test\test1.zip").start() 
Downloader('http://example.com/test2.zip', "C:\Test\test2.zip").start() 

Дать это с верхней части моей головы, поэтому не гарантируется. Ключ должен подклассифицировать класс Thread и переопределить функцию run(), а затем запустить поток.

Что касается ответа Dave_750, потоковая передача фактически эффективна в этой ситуации, потому что операция загрузки - это ввод-вывод, а не интерпретация кода Python, поэтому GIL на самом деле не проблема. Например, я использую потоки для отправки нескольких электронных писем.