python中用两种不同的方式开进程

直接使用Process类开启进程

 

import os
import time
from multiprocessing import Process


def func(name):
    time.sleep(1)
    # os.getpid() 获取进程id, os.getppid()获取父进程id
    print('参数:%s,子进程id:%s,父进程id:%s' % (name, os.getpid(), os.getppid()))


# 为什么要有if __name__ == '__main__': windows操作系统开启子进程的方式问题
if __name__ == '__main__':

    for i in range(5):
        p = Process(target=func, args=('rock',))
        p.start()
    time.sleep(1)
    # 主进程会默认等待子进程结束之后才结束
    # 父进程要负责回收子进程占用的操作系统资源
    print('Hi主进程id:%s,父进程id(pycharm 的进程id):%s' % (os.getpid(), os.getppid()))

 

通过自定义类继承Process类开启进程

# 自定义类开启进程
import time
from multiprocessing import Process


# 自定义类继承Process类
class MyProcess(Process):
    # 必须实现run方法和init方法
    def __init__(self, a, b):
        super().__init__()
        self.a = a
        self.b = b

    # 执行start时会自动执行run方法
    def run(self):
        print('start')
        time.sleep(10)
        print('end', self.a, self.b)


if __name__ == '__main__':
    p = MyProcess(1, 2)
    # 开启子进程
    p.start()
    print(p.is_alive())     # 判断子进程是否存在存在返回True
    time.sleep(1)
    print(p.name, p.pid)    # 查看进程名和id
    p.terminate()   # 非阻塞 在主进程运行完后终结子进程
    print(p.is_alive())
    time.sleep(0.1)     # 终结子进程需要时间
    print(p.is_alive())

 

通过自定义类继承Process类开启多个进程

# 自定义类开启进程
import time
from multiprocessing import Process


# 自定义类继承Process类
class MyProcess(Process):
    # 必须实现run方法和init方法
    def __init__(self, a, b):
        super().__init__()
        self.a = a
        self.b = b

    # 执行start时会自动执行run方法
    def run(self):
        print('start')
        time.sleep(1)
        print('end', self.a, self.b)


if __name__ == '__main__':
    lis = []
    for i in range(10):    # 开启10个进程
        p = MyProcess(1, 2)
        # 开启子进程
        p.start()
        print(p.name, p.pid)
        lis.append(p)
    for i in lis:
        i.join()
    print('hello')

 

posted @ 2019-01-26 14:11  平平无奇小辣鸡  阅读(171)  评论(0)    收藏  举报