multiprocessing多进程
概念
创建多进程基本流程
创建进程对象
启动进程 回收进程
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import multiprocessing as mp
from time import sleep
# 进程执行函数
def fun():
print ( "开始一个进程" )
sleep( 3 )
print ( "进程结束" )
# 创建进程对象
p = mp.process(target = fun)
p.start() # 启动进程
p.join() # 回收进程
|
运行结果:
开始一个进程
进程结束
process finished with exit code 0
1 、父子进程是并行执行的 子进程执行函数 父进程执行除子进程外内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import multiprocessing as mp
from time import sleep
# 进程执行函数
def fun():
print ( "开始一个进程" )
sleep( 3 )
print ( "进程结束" )
# 创建进程对象
p = mp.process(target = fun) # 把fun函数作为独立子进程 其它函数由进程来执行
p.start() # 启动进程
sleep( 2 )
print ( "父进程执行内容" )
p.join() # 回收进程
print ( "===============" )
"""
pid = os.fork
if pid == 0
fun()
os._exit(0)
else:
os.wait()
"""
|
运行结果:
开始一个进程
父进程执行内容
进程结束
===============
2、子进程不能改变父进程中变量的值
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import multiprocessing as mp
from time import sleep
a = 1
# 进程执行函数
def fun():
print ( "开始一个进程" )
sleep( 3 )
global a
print ( "a=" , a)
a = 1000
print ( "a=" , a)
print ( "进程结束" )
# 创建进程对象
p = mp.process(target = fun) # 把fun函数作为独立子进程 其它函数由进程来执行
p.start() # 启动进程
sleep( 2 )
print ( "父进程执行内容" )
p.join() # 回收进程
print ( "===============" )
print ( "a=" , a)
|
运行结果:
开始一个进程
父进程执行内容
a= 1
a= 1000
进程结束
a= 1
创建多个进程
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
"""
创建多个进程
"""
from multiprocessing import process
import os
from time import sleep
def fun1():
sleep( 2 )
print (os.getppid(), '--' , os.getpid(), "吃饭" )
def fun2():
sleep( 3 )
print (os.getppid(), '--' , os.getpid(), "睡觉" )
def fun3():
sleep( 4 )
print (os.getppid(), '--' , os.getpid(), "学习" )
jobs = []
for th in [fun1, fun2, fun3]:
p = process(target = th)
jobs.append(p)
p.start()
for i in jobs:
i.join()
|
运行结果:
46013 – 46022 吃饭
46013 – 46023 睡觉
46013 – 46024 学习
含有参数的进程函数
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from multiprocessing import process
from time import sleep
# 含有参数的进程函数
def worker(sec, name):
for i in range ( 3 ):
sleep(sec)
print ( "i'm %s" % name)
print ( "i'm working..." )
# p = process(target = worker, args = (2, "tom"))
p = process(target = worker, kwargs = { 'name' : 'tom' , 'sec' : 2 })
p.start()
p.join()
|
运行结果:
i'm tom
i'm working…
i'm tom
i'm working…
i'm tom
i'm working…
案例练习
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
from multiprocessing import process
import os
filename = './dace.jpg'
size = os.path.getsize(filename)
# 复制上半部分
def up():
fr = open (filename, 'rb' )
fw = open ( 'bot,jpg' , 'wb' )
n = size / / 2
fw.write(fr.read(n))
fw.close()
fr.close()
# 复制下半部分
def down():
fr = open (filename, 'rb' )
fw = open ( 'bot,jpg' , 'wb' )
fr.seek(size / / 2.0 )
fw.write(fr.read())
fw.close()
fr.close()
p = process(target = up)
q = process(target = down)
p.start()
q.start()
p.join()
q.join()
|
到此这篇关于总结python多进程multiprocessing的相关知识的文章就介绍到这了,更多相关python multiprocessing多进程内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/weixin_55643605/article/details/117908473