「Python并发编程-3」多进程实现

关于多线程的实现及理解,文章总览这篇文章有给出推荐教程,故不赘述。

下面谈谈多进程:

  • 多进程的四种代码实现
  • 多进程的通信
  • 如何启动外部进程

1.关于多进程的四种代码实现,可以看下面的链接,这里不赘述。
Python多进程前三种实现-fork、Process、Pool
Python多进程第四种实现-ProcessPoolExecutor

2.多进程的通信
通常来讲,每个进程包含三个部分:数据段,代码段和堆栈段,而且进程与进程之间是独立的,互不影响的。

一个进程间数据独立的例子:

# 打印结果是每个列表(li)只有一个元素,因为篇幅问题就不贴上了
from multiprocessing import Process
li = []
process_list = []

def foo(i):
    # 向列表中加入当前的进程序列号
    li.append(i)
    print('say hi', li)

for i in range(10):
    p = Process(target=foo, args=(i,))
    process_list.append(p)

for p in process_list:
    p.start()

for p2 in process_list:
    p2.join()

print('ending', li)

一个进程间通信(数据共享)的例子:
进程间通信可以使用Manager,Manager支持 list, dict, Condition, Event,Queue, Value and Array等类型

# 打印结果是每个列表(li)包含多个元素,因为篇幅问题就不贴上了

from multiprocessing import Process,Manager

manager = Manager()
li = manager.list()
process_list = []

def foo(i):
    # 向列表中加入当前的进程序列号
    li.append(i)
    print('say hi', li)

for i in range(10):
    p = Process(target=foo, args=(i,))
    process_list.append(p)

for p in process_list:
    p.start()

for p2 in process_list:
    p2.join()

print('ending', li)

3.启动外部进程
会先打印 parent process 再执行 ls 命令,有点像异步。

import subprocess
child = subprocess.Popen(["ls"])
print("parent process")

上一篇:「Python并发编程-2」基础概念
下一篇:「Python并发编程-4」高并发模拟与处理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容