day 30-2 网络编程——认识进程
多进程
主要参数
p = Process(target=func, ) # 实例化 p.pid # 查看 pid p.start() # 启动进程 p.join() # 让主进程检测子进程是否运行完毕 p.name() # 查看进程名 p.terminate() # 终止进程 p.is_alive() # 查看进程是否存活,返回值:True、False。 os.getpid() # 参看pid os.getppid() # 查看ppid,父级
开启子进程的两种方法
方法一:
from multiprocessing import Process import time def pro(name): print('this is %s' % name) time.sleep(3) print('子进程运行结束') if __name__ == '__main__': # p1 = Process(target=pro, args=('ysg',)) p = Process(target=pro, kwargs={'name': 'ysg'}) p.start() print('this is 主进程')
方法二:
from multiprocessing import Process import time class Pro(Process): def __init__(self, name): super().__init__() self.name = name def run(self): print('this is %s' % self.name,) time.sleep(3) print('子进程运行结束') if __name__ == '__main__': p = Pro('ysg') p.start() print('this is 主进程')
.join() 串行与非串行
from multiprocessing import Process import time import os def func(name, times): print('this is 子进程 %s' % (name)) time.sleep(times) print('进程结束') if __name__ == '__main__': start = time.time() p1 = Process(target=func, args=('子进程 1', 5)) p2 = Process(target=func, args=('子进程 2', 3)) p3 = Process(target=func, args=('子进程 3', 2)) # 非串行 时间 5.109249591827393 p_l = [p1, p2, p3] for p in p_l: p.start() for p in p_l: p.join() # 串行 时间 10.2953782081604 # p1.start() # p1.join() # p2.start() # p2.join() # p3.start() # p3.join() print('this is 主进程,时间 %s' % (time.time()-start))
进程属性及方法
from multiprocessing import Process import time def func(name): print('this is 子进程:%s' % (name)) time.sleep(3) if __name__ == '__main__': p = Process(target=func, args=('子进程 1',), name='sub_name') # 设置子进程名称,存在默认值 p.start() print(p.is_alive()) # True p.terminate() # 终止进程 time.sleep(1) print(p.is_alive()) # False p.join() print('this is 主进程') print(p.name, p.pid) # sub_name 9240