美文网首页
笔记 多进程 in Python, since 2020.02.

笔记 多进程 in Python, since 2020.02.

作者: Mc杰夫 | 来源:发表于2020-02-06 21:30 被阅读0次

2020.02.06

Python中多进程开发的两个module: multiprocessing(mp) & mpi4py(mpi)

mp是基于内存共享编程范式,不管系统有多少处理器,他们都可以访问一个公共内存。

mpi是基于消息传递,处理器之间不使用共享资源,通过消息传递实现进程通信。

mp的操作

1 生成进程(spawn), mp中的start()方法。Spawn指的是通过父进程来创建进程,父进程以异步的形式继续执行,或是等待,直到子进程执行结束。在调用进程完成时,需要调用join()方法。不调用join(),子进程就会空闲下来。

步骤:

1 构建对象进程

2 调用其start()方法,会开启进程活动

3 调用其join()方法,会等待,直到进程完成其工作并退出为止。

daemon进程:后台进程,程序退出就会自动关闭。后台进程不允许创建子进程。

终结进程:terminate()方法,并可用is_live()方法判断是否终结成功。

进程间的通信方法(含同步):

1 队列(mp.Queue()方法): 进程共享队列,是线程和进程安全的。任何可序列化对象都可以通过队列进行交换。

2 管道对象(mp.Pipe()方法): 管道会返回其所连接的一对连接对象;每个对象拥有send/recv方法。编程时仅需要在进程间传递管道对象即可。

3 屏障(mp.Barrier()方法): 用于同步进程。将一个程序分成几个阶段,要求所有进程都到达后才能开始执行,屏障后的代码不能与屏障前的代码并发执行。mp.Barrier().wait()方法用于等待其他进程,当规定数目的进程到达时,就可以同步。屏障的进程数由mp.Barrier(n)中的参数n决定。当参与了屏障的进程都调用了.wait()方法后,他们在屏障后会被同时释放。

管理进程间状态:

mp.Manager()方法:协调用户之间的共享信息,管理器对象会控制一个服务端进程,其持有python对象,并可以让其他进程操作这个对象。它会控制服务端进程,该进程会管理共享对象;当有人修改共享对象时,它会确保共享对象在所有进程中都会更新(区块链?)。mp.Manager()中的.dict()方法提供了一个字典,可以用来保存各进程的变量。

Reference:

[1] G. Zaccone,张龙宋秉金译,Python并行编程手册

相关文章

网友评论

      本文标题:笔记 多进程 in Python, since 2020.02.

      本文链接:https://www.haomeiwen.com/subject/sivyxhtx.html