关于多线程的实现及理解,文章总览这篇文章有给出推荐教程,故不赘述。
下面谈谈多进程:
- 多进程的四种代码实现
- 多进程的通信
- 如何启动外部进程
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")
网友评论