在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、创建一个进程要创建一个进程,最简单的方式是用一个目标函数实例化一个Process对象,然后与threading一样调用start()函数让它工作。示例如下: import multiprocessing def worker(): for i in range(3): print(i) if __name__=="__main__": p = multiprocessing.Process(target=worker) p.start() 运行之后,效果如下:
二、设置进程名在threading线程中,我们可以通过其参数name设置线程名,同样的我们也可以通过name参数设置其进程的名字。示例如下: import multiprocessing import time def worker(): print(multiprocessing.current_process().name, "start") time.sleep(2) print(multiprocessing.current_process().name, "end") if __name__ == "__main__": p1 = multiprocessing.Process(name='p1', target=worker) p2 = multiprocessing.Process(name='p2', target=worker) p3 = multiprocessing.Process(name='p3', target=worker) p1.start() p2.start() p3.start() 运行之后,效果如下: 三、守护进程和线程一样,在所有子进程没有退出之前,主程序是不会退出的。有时候,我们可能需要启动一个后台进程,它可以一直运行而不阻塞主程序退出。 要标志一个守护进程,可以将其添加第3个参数daemon,设置为True。默认值为False,不作为守护进程。示例如下: import multiprocessing import time def worker(): print(multiprocessing.current_process().name, "start") time.sleep(1) print(multiprocessing.current_process().name, "end") def worker2(): print(multiprocessing.current_process().name, "start") time.sleep(2) print(multiprocessing.current_process().name, "end") if __name__ == "__main__": p1 = multiprocessing.Process(name='p1', target=worker) p2 = multiprocessing.Process(name='p2', target=worker2, daemon=True) p3 = multiprocessing.Process(name='p3', target=worker2, daemon=True) p1.start() p2.start() p3.start() 运行之后,效果如下:
四、join()同样的,如果你期望强制等待一个守护进程的结束,可以增加join()函数。还是上面的代码,示例如下: import multiprocessing import time def worker(): print(multiprocessing.current_process().name, "start") time.sleep(1) print(multiprocessing.current_process().name, "end") def worker2(): print(multiprocessing.current_process().name, "start") time.sleep(2) print(multiprocessing.current_process().name, "end") if __name__ == "__main__": p1 = multiprocessing.Process(name='p1', target=worker) p2 = multiprocessing.Process(name='p2', target=worker2, daemon=True) p3 = multiprocessing.Process(name='p3', target=worker2, daemon=True) p1.start() p2.start() p3.start() p1.join() p2.join() p3.join()
五、强制结束进程如果一个进程已经挂起或者不小心进入了死锁状态,那么这个时候,我们往往会强制的结束进程。对一个进程对象调用terminate()会结束子进程。示例如下: import multiprocessing import time def worker(): print(multiprocessing.current_process().name, "start") time.sleep(5) print(multiprocessing.current_process().name, "end") if __name__ == "__main__": p1 = multiprocessing.Process(name='p1', target=worker) p1.start() print("是否还在运行", p1.is_alive()) p1.terminate() print("是否还在运行", p1.is_alive()) p1.join() print("是否还在运行", p1.is_alive()) 运行之后,输出如下:
六、进程退出状态码进程退出时,生成的状态码可以通过exitcode属性访问。下表就是其状态码的取值范围以及其意义:
|
2022-05-27
2022-05-27
2022-05-27
2022-05-27
2022-05-27
请发表评论