Python中的进程

Python中的进程

多进程

多进程是真正的并行

Python中的GIL,多线程不是CPU密集型程序的好的选择

多进程可以绕过GIL

多进程可以完全独立的进程环境中运行程序,可以充分利用多处理器

multiprocessing类

Process类

Process类遵循了Thread类的API.常用的进程线程方法大致相同

注意:在创建子进程的时候,windows会将当前父类代码重新加载执行一次,linux和mac会使用fork方法将父进程代码拷贝一份,再去执行

所以Windows下创建子进程要放入__name__=='__main__'中执行

名称 说名
pid 查看进程id,等同于os.getpid()
ppid 查看父进程的id(parent pid)
exitcode 进程的退出状态码
terminate() 终止指定的进程

进程间同步

multiprocessing提供了共享内存,服务器进程来共享数据,还提供了Queue队列,Pipe管道用于进程间通信.

通讯方式不同:

1.多进程就是启动多个解释器进程,进程同新建必须序列化,反序列化,所以不能序列化的数据不能通信

2.数据的线程安全问题:

​ 由于每个进程中没有实现多线程,GIL就没什么用了

进程池

multiprocessing.Pool是进程池类

名称 说明
apply() 阻塞执行,导致主线程执行其他子进程就像一个个执行
apply_async() 与apple方法使用一致,非阻塞执行,得到结果后会执行回调
close() 关闭池,池不能再接受新的任务
terminate() 结束工作进程,不再处理未处理的任务
join() 主进程阻塞等待子进程的退出,join方法要在close或terminate之后使用
原文地址:https://www.cnblogs.com/agsol/p/11716034.html