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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一门支持多进程和多线程的编程语言,通过多进程和多线程,程序可以充分利用系统资源,提高程序处理效率,实现更加复杂的并发操作。 在python中,可以使用multiprocessing库实现多进程,也可以使用threading库实现多线程。下面,我们来看一下具体的代码实例。 多进程实现: ```python import multiprocessing def worker(num): print('Worker %d is running...' % num) if __name__ == '__main__': for num in range(5): p = multiprocessing.Process(target=worker, args=(num,)) p.start() ``` 在上面的代码中,我们定义一个worker函数和主函数。主函数创建5个进程,每个进程都调用worker函数。通过multiprocessing库的Process类创建进程,target参数传入worker函数,args参数传入函数所需的参数。 多线程实现: ```python import threading def worker(num): print('Worker %d is running...' % num) if __name__ == '__main__': for num in range(5): t = threading.Thread(target=worker, args=(num,)) t.start() ``` 在上面的代码中,我们同样定义了一个worker函数和主函数。主函数创建5个线程,每个线程都调用worker函数。通过threading库的Thread类创建线程,target参数传入worker函数,args参数传入函数所需的参数。 需要注意的是,多进程和多线程的实现方式略有不同。在多进程中,由于每个进程独立占用一部分系统资源,需要使用if __name__ == '__main__':来判断是否是主进程。而在多线程中,由于所有线程共享同一进程内的资源,没有这个问题。 以上就是python实现多进程和多线程的代码实例。需要根据具体场景来选择使用哪种方法实现并发操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值