python 实现多进程

方法一:

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()

你可能感兴趣的:(python 实现多进程)