python在windows和linux环境的进程对比
1.fork进程:
(1)在windows系统中不可以用fork来创建进程,linux可以,但是创建大量进程使用很不方便。
2.Process进程:
1 import multiprocessing as ms
2 import time
3 import os
4
5
6 class MyProcess(ms.Process):
7 def run(self):
8 print("这是进程!", os.getpid())
9
10 def __del__(self):
11 print("删除成功!")
12
13
14 def main():
15 p1 = MyProcess()
16 p2 = MyProcess()
17 p1.start()
18 time.sleep(1)
19 p2.start()
20 time.sleep(1)
21 p2.join() #等待进程结束
22 # print(ms.active_children())
23 # while True:
24 # time.sleep(0.01)
25
26 if __name__ == "__main__":
27 main()
windows系统下结果:
linux系统下结果:
说明:
(1)如上代码,当重写Process的run方法创建进程后,可以看到windows系统会在子进程执行完毕后立即删除Process对象,
但是linux系统并没有删除;同时在主进程结束后,windows系统会将主进程的Process对象删除,也就是会出现两次“删除成功”,
但是linux系统中只有一次“删除成功”的输出,也就是说只显示了一次。
(2)if __name__ == '__main__':
在windows环境下创建进程及相关的可执行代码必须放在if __name__ == '__main__':下,否则会报错;但是linux系统没有这个问题。
3.Pool进程:
(1)Pool进程也一样,在windows环境下相关的可执行代码必须放置在if __name__ == '__main__'下。
三种进程的进程回收分析:python的multiprocessing模块进程创建、资源回收-Process,Pool