• (3)进程的创建


     

    创建子进程的三种方式:

    (一)只能在linux运行,windows不行

    # import os

    # os.fork()

    # print(os.getpid())

    (二)for 循环,创建指定个数的的子进程

    from multiprocessing import Process
    
    def func(index):
    
      print("第%s封邮件已经发送" % (index))
    
    if __name__ == '__main__': # 作为主程序运行
    
      for i in range(10):  #创建10个子进程
    
        p = Process(target=func,args=(i,))  # args给进程函数传参,必须是元组
    
        p.start()  #开启子进程
    View Code

    执行结果:

    第1封邮件已经发送
    第0封邮件已经发送
    第3封邮件已经发送
    第2封邮件已经发送
    第5封邮件已经发送
    第4封邮件已经发送
    第6封邮件已经发送
    第7封邮件已经发送
    第8封邮件已经发送
    第9封邮件已经发送
    View Code

    (三)自己定义一个类,继承Process类

    (1)无参

    from multiprocessing import Process
    import os
    class MyProcess(Process):
    
    # 必须使用run方法,规定这样写
    
        def run(self):
            print("子进程: 参数:",os.getpid(),os.getppid())  # 获取子进程id号和主进程id号
    
    if __name__ == '__main__':
        MyProcess().start()
        print('主进程:',os.getpid())
    View Code

    # 执行结果:因为没有阻塞,由于cpu的自行调度,主进程运行得更快

    主进程: 7068
    子进程: 参数: 4376 7068
    View Code

    (2) 有参

    import os
    from multiprocessing import Process
    class Myprocess(Process):  # 自定义一个类继承父类Process
        def __init__(self, arg):
            super().__init__()  # 调用父类的构造方法
            self.arg = arg
    
        def run(self): # 自动调用run方法
            print("子进程: 参数:", os.getpid(), os.getppid(), self.arg)
    
    if __name__ == '__main__':
        lis = []
        for i in range(10):
            p = Myprocess('参数%s' % (i))
            p.start()
            lis.append(p)
        for p in lis:
            p.join()  # 添加阻塞,让子进程先执行完,主程序最后执行
        print("主进程", os.getpid())
    View Code

    执行结果:

    子进程: 参数: 6808 6548 参数1
    子进程: 参数: 7088 6548 参数0
    子进程: 参数: 6940 6548 参数3
    子进程: 参数: 2220 6548 参数5
    子进程: 参数: 6580 6548 参数2
    子进程: 参数: 6488 6548 参数4
    子进程: 参数: 6828 6548 参数6
    子进程: 参数: 6620 6548 参数7
    子进程: 参数: 1844 6548 参数8
    子进程: 参数: 6736 6548 参数9
    主进程 6548
    View Code

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    顺时针打印二维矩阵
    hbase的rowKey设计原则
    关于这段时间学习 EntityFramework的 一点感悟
    一次排序序号的补充
    我的第一段jQuery代码
    非常郁闷的 .NET中程序集的动态加载
    关于EF6的记录Sql语句 与 EntityFramework.Extend 的诟病
    排序更改
    ZhyjEye 简介
    js数组去重的4个方法
  • 原文地址:https://www.cnblogs.com/lyj910313/p/10787150.html
Copyright © 2020-2023  润新知