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

浙公网安备 33010602011771号