• 多进程调用


    # 多进程调用(大部分与多线程的操作一样)
    # 调用方式1
    from multiprocessing import Process
    import time
    
    
    def f(name):
        time.sleep(1)
        print('hello', name, time.ctime())
    
    
    if __name__ == '__main__':
        p_list = []
        for i in range(3):
            p = Process(target=f, args=('alex',))
            p_list.append(p)
            p.start()
        for i in p_list:
            i.join()
        print('end')
    
    # 调用方式2
    from multiprocessing import Process
    import time
    
    
    class MyProcess(Process):
        # def __init__(self):
        #     super(MyProcess, self).__init__()
        #     self.name = name
    
        def run(self):
            time.sleep(1)
            print('hello', self.name, time.ctime())
    
    
    if __name__ == '__main__':
        p_list = []
        for i in range(3):
            p = MyProcess()
            # p.daemon = True   # 设置守护进程
            p.start()
            p_list.append(p)
        # for i in p_list:
        #     i.join()
    
        print('end...')
    
    
    # 查看进程的pid
    from multiprocessing import Process
    import os, time
    
    
    def info(title):
        print('title:', title)
        print('parent process:', os.getppid())
        print('process id:', os.getpid())
    
    
    def f(name):
        info('function f')
        print('hello', name)
    
    
    if __name__ == '__main__':
        info('main process line')
        time.sleep(1)
        print('-' * 30)
        p = Process(target=info, args=('alex',))
        p.start()
        p.join()
    
        # title: main process line
        # parent process: 1792      # 父进程的进程pid(pycharm)
        # process id: 4116      # 当前.py文件运行的pid
        # ------------------------------
        # title: alex
        # parent process: 4116      # 父进程的pid即当前.py文件运行的pid
        # process id: 6392      # 产生的子进程的pid
    # Process类的方法与属性
    # 构造方法:
    # Process(group[, target[, name[, args[, kwargs]]]])
    # group: 线程组,目前还没有实现,库引用中提示必须是None
    # target: 要执行的方法
    # name: 指定进程名
    # args / kwargs: 要传入方法的参数
    #
    # 实例方法:
    # is_alive() 返回进程是否在运行
    # join([timeout]) 阻塞当前上下文环境的进程,直到调用此方法的进程终止或到达指定的timeout
    # start() 进行准备就绪,等待cpu调度
    # run() start()方法调用run方法,如果实例进程时未制定传入target,这start执行默认run方法
    # terminate() 不管任务是否完成,立即停止工作进程
    #
    # 属性:
    # daemon 和线程的setDaemon功能一样
    # name 进程名字
    # pid 进程号
    
    from multiprocessing import Process
    import time
    
    
    class MyProcess(Process):
        def __init__(self, num):
            super(MyProcess, self).__init__()
            self.num = num
    
        def run(self):
            time.sleep(1)
            print(self.is_alive(), self.num, self.pid)
            time.sleep(1)
    
    
    if __name__ == '__main__':
        p_list = []
        for i in range(10):
            p = MyProcess(i)
            p_list.append(p)
    
        for p in p_list:
            p.start()
    
        print('main process end')
  • 相关阅读:
    cqyz oj | 单峰排列
    cqyz oj/uva 548 | 二叉树
    cqyz oj | 树网的核 | 树的直径
    cqyz oj | 树上的询问 | 最近公共祖先
    cqyz oj | 循环逆序对 | 逆序对 | 树状数组
    cqyz oj | 潜水比赛 | 贪心
    YOLO v3 & Pascal VOC数据集
    太阳爆发分类
    PPT制作
    anaconda
  • 原文地址:https://www.cnblogs.com/dangrui0725/p/9499046.html
Copyright © 2020-2023  润新知