python程序退出策略

时间:2022-12-18 11:11:43
python程序退出策略:
其实跟java的jvm退出策略一致,只有在没有用户线程/进程,只有后台线程或进程的时候,才会退出,注意,主线程默认应该是用户线程

在主线程中新建子线程或者子进程默认都是用户线程或者进程,此时如果主线程提前结束,那么必须等待子线程或子进程退出,python程序才会退出。如果在新建子线程/子进程的时候设置成了守护的,那么当主线程结束的时候就会直接退出。
设置守护线程的方法:Thread.setDaemon(true)
设置守护进程的方法:Process.daemon = true

这里实践发现,子线程和子进程有一个区别:
对于创建子线程,如果从主线程传入了一个dict对象,那么当主线程结束的时候该dict对象仍然有效,尚未结束的子线程仍然可以使用该对象
但是对于子进程,如果从主线程传入了一个进程特有的dict对象,如下:
m = Manager()
d = m.dict()
那么当主线程结束的时候,d对象就无效了,此时尚未结束的子进程就无法使用该对象了,如果打印该对象可以发现如下警告:
<DictProxy object, typeid 'dict' at 0x9a6510; '__str__()' failed>
如果直接对d对象赋值,会直接抛出异常
但是对于子进程的情况,有另外一点需要注意,主线程退出的时候,主线程中创建的d无效了。但是如果在主线程中创建了另外一个子线程,那么当主线程退出的时候,如果子线程还没退出,那么主线程中创建的d对象仍然有效。应该是因为主线程和子线程是共用内存的,因为子线程未退出,所以这段内存仍然有效