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

2018-09-25  本文已影响0人  言淦

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

下面谈谈多进程:

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」高并发模拟与处理

上一篇 下一篇

猜你喜欢

热点阅读