守护进程
守护进程(Daemon Process)是在Unix、Linux和其他类Unix操作系统中的一个后台服务进程,独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程一般在系统启动时开始运行,并且长时间运行。它们常常在系统后台默默执行,等待随时被激活以处理系统事件或者提供服务。
import multiprocessing
import time
# 定义进程所需要执行的任务
def task():
for i in range(10):
print("任务执行中...")
time.sleep(0.2)
if __name__ == '__main__':
# 创建子进程
sub_process = multiprocessing.Process(target=task)
sub_process.start()
# 主进程延时0.5秒钟
time.sleep(0.5)
print("over")
exit()
------------------------------------------------------
任务执行中...
任务执行中...
任务执行中...
over
任务执行中...
任务执行中...
任务执行中...
任务执行中...
任务执行中...
任务执行中...
任务执行中...
# 总结: 主进程会等待所有的子进程执行完成以后程序再退出
如果想让主进程执行完毕,子进程还没执行完毕就销毁不再执行,需要怎么做?
答:可以设置守护主进程 或者 在主进程退出之前 让子进程销毁。设置守护主进程的主要作用是当主进程终止时,守护进程会自动终止。
为了保证子进程能够正常的运行,主进程会等所有的子进程执行完成以后再销毁,设置守护主进程的目的是主进程退出子进程销毁,不让主进程再等待子进程去执行。
端口复用
TCP网络通信中有一个三次握手,四次挥手,最后一次挥手的时候,端口不是立马释放的,会被占用大致2ms。解决方法:使用端口复用函数设置,让一个网络程序一旦停止,该网络程序所使用的端口立马释放,进行复用。如果想使用端口复用,设置的时机是在服务器绑定端口之前。
# 设置端口号复用,让程序退出端口号立即释放
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)