方法一:
from urllib import request
from multiprocessing import Process
import os
#下載器函數
def downloader(url,**kwargs):
print('當前進程id:',os.getpid(),os.getppid())
#os.getpid()獲取當前進程id,os.getppid()獲取當前進程父進程id
print('關鍵字參數:',kwargs['pro'])
#文件名
file_name = url.split('/')[-1]
#網絡請求
response = request.urlopen(url)#一個響應對象
#獲取響應的內容
content = response.read()
#保存
with open(file_name,'wb') as fp:
fp.write(content)
if __name__ == '__main__':
url_list = [
'https://www.baidu.com/img/baidu_jgylogo3.gif',
'http://www.offcn.com/statics/images/zgimg/index2019.png'
]
name_list = ['進程1--張翠花','進程2---趙鐵蛋']
p_list = []#進程列表
i = 0
for url in url_list:
n = name_list[i]
i = i+1
p = Process(target=downloader,name=n,args=(url,),kwargs={'pro':"最高等級"})
print('子進程(%s)將要被運行~!'%p.name)
p.start()
p_list.append(p)
for p in p_list:
p.join()#對所有子進程加上阻塞,等到子進程全部執行完畢,再繼續執行主進程
print('主進程id:',os.getpid())
#確保這一句代碼在所有子進程結束
print('~~~~~~~~~~~~~~~~~~~~所有文件下載完成!~~~~~~~~~~~~~~~~~~~~~~~')
方法二
from multiprocessing import Process
import os
from urllib import request
#步驟1:繼承Process類
class Process_Class(Process):
# 因為Process類本身也有__init___方法,這個子類相當于重寫了這個方法。
# 但這樣會帶來一個問題,我們并沒有完成的初始化一個進程類,所以就不能使用這個類繼承的一些方法和屬性。
#步驟2:使用父類初始化方法初始子類
def __init__(self,url):
Process.__init__(self)
self.url = url
#步驟3:重寫Process類中的run方法
def run(self):
print('當前進程id:', os.getpid(), os.getppid())
# 文件名
file_name = self.url.split('/')[-1]
# 網絡請求
response = request.urlopen(self.url) # 一個響應對象
# 獲取響應的內容
content = response.read()
# 保存
with open(file_name, 'wb') as fp:
fp.write(content)
if __name__ == '__main__':
url_list = [
'https://www.baidu.com/img/baidu_jgylogo3.gif',
'http://www.offcn.com/statics/images/zgimg/index2019.png'
]
for url in url_list:
p = Process_Class(url)
p.start()
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
