总结
1.multiprocess模块
-
Python中提供multiprocess模块实现多进程并发;
-
multiprocessing
支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock等 组件; -
可以
multiprocessing.Process
对象来创建一个进程,该进程可以运行在Python程序内部编写的函数; -
process模块是一个创建进程的模块,借助这个模块,就可以完成进程的创建,有
start()
,run()
,join()
的方法;
2.进程并发:concurrent模块
concurrent模块能够提供一个future的实例对象,实例对象提供了线程的执行器和进程的执行器;
-
submit()
:返回一个Future对象; -
result()
:查看调用的返回结果; -
done()
:如果任务成功执行或任务取消返回True; -
cancel()
:取消任务; -
running()
:如果任务正在执行返回True; -
exception()
: 获取执行抛出的异常;
3.守护进程实现(POSIX兼容)
-
在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期 性的执行某种任务或等待处理某些发生的事件;
-
由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终 端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭;
-
但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运 行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断,它从被执行的时候 开始运转,直到整个系统关闭才退出;
守护进程实现的步骤:
-
父进程fork出子进程并exit退出;
-
子进程调用setsid创建新会话;
-
子进程调用系统函数chdir将根目录
"/"
成为子进程的工作目录; -
子进程调用系统函数umask将该进程的umask设置为0;
-
子进程关闭从父进程继承的所有不需要的文件描述符;
对 os.fork( )的理解:
-
os.fork()
返回两个值,一个是在当前父进程返回的,一个是在子进程中返回的; -
子进程返回的是0,父进程返回的是子进程的pid;