多进程开发如何共享数据:以python为例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/njnujuly/article/details/80997804

最近使用gunicorn部署了一个项目,在启动的时候,加上了worker 3的参数。也就是说,同时有3个进程存在。
这就引出了进程间通信的问题。因为有一个功能只用单线程去执行就行了,也就是说,即使启动100个进程,
这部分功能只有一个执行的实例才可以。否则系统就紊乱了。

如何在多进程之间共享数据呢?
根据我搜索到的资料,有以下几种方案:

使用 multiprocessing.managers

介绍:http://www.cnblogs.com/Xjng/p/4902514.html

外部资源共享对象,例如数据库,文件等

这个很好理解,即使进程再多,连接的都是同一个数据的同一张表,更新的都是一个变量的值。
不管任何进程更新了值,后面再执行的进程取到的值肯定就是最新的 了。

使用 thread worker 来跑

其他控制方法

进程间通信的可能性不大了,因为是 gunicorn 控制的。的确是这样,原来的代码也没有考虑到多进程处理。
况且据说python的多进程是假的。。。。所以说,需要找到一个让代码只执行一次的控制条件。
比如当前代码的副作用就是生成了一个文件。我就在每次执行之前判断当前是否存在产生时间为这个时间点的文件存在,
如果存在,直接跳过本次循环就好了。

心得

在一开始的设计中就要考虑好是用多线程,多进程,还是单线程,单进程。

猜你喜欢

转载自blog.csdn.net/njnujuly/article/details/80997804