本文实例讲述了python3.5多进程原理与用法。分享给大家供大家参考,具体如下:
进程类:process
示例及代码:
(1)创建函数作为单进程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:zhengzhengliu
import multiprocessing
import time
#创建函数并将其作为单个进程
def worker(interval):
n = 5 #进程数
while n> 0 :
print ( "the time is :{0}" . format (time.ctime())) #初始化时间
time.sleep(interval) #睡眠时间
n - = 1
if __name__ = = "__main__" :
# 创建进程,target:调用对象,args:传参数到对象
p = multiprocessing.process(target = worker,args = ( 2 ,))
p.start() #开启进程
print ( "进程号:" ,p.pid)
print ( "进程别名:" ,p.name)
print ( "进程存活状态:" ,p.is_alive())
|
运行结果:
进程号: 6784
进程别名: process-1
进程存活状态: true
the time is :wed nov 1 10:59:03 2017
the time is :wed nov 1 10:59:05 2017
the time is :wed nov 1 10:59:07 2017
the time is :wed nov 1 10:59:09 2017
the time is :wed nov 1 10:59:11 2017
(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
27
28
29
|
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:zhengzhengliu
import multiprocessing
import time
#创建函数作为多进程
def work1(interval):
print ( "work1..." )
time.sleep(interval)
print ( "end work1..." )
def work2(interval):
print ( "work2..." )
time.sleep(interval)
print ( "end work2..." )
def work3(interval):
print ( "work3..." )
time.sleep(interval)
print ( "end work3..." )
if __name__ = = "__main__" :
p1 = multiprocessing.process(target = work1,args = ( 1 ,))
p2 = multiprocessing.process(target = work2,args = ( 2 ,))
p3 = multiprocessing.process(target = work3,args = ( 3 ,))
p1.start()
p2.start()
p3.start()
print ( "the number of cpu is %d:" % (multiprocessing.cpu_count())) #打印cpu核数
for p in multiprocessing.active_children(): #循环打印子进程的名称和pid
print ( "子进程名称:%s,子进程pid:%d" % (p.name,p.pid))
print ( "ending...." )
|
运行结果:
the number of cpu is 4:
子进程名称:process-2,子进程pid:7108
子进程名称:process-1,子进程pid:1896
子进程名称:process-3,子进程pid:7952
ending....
work3...
work1...
work2...
end work1...
end work2...
end work3...
注:先运行主进程的内容,再运行子进程
(3)将进程定义成一个类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:zhengzhengliu
import multiprocessing
import time
#将进程定义为一个类
class clockprocess(multiprocessing.process):
def __init__( self ,interval):
multiprocessing.process.__init__( self ) #重构了process类里面的构造函数
self .interval = interval
def run( self ): #固定用run方法,启动进程自动调用run方法
n = 5
while n> 0 :
print ( "the time is {0}" . format (time.ctime()))
time.sleep( self .interval)
n - = 1
if __name__ = = "__main__" :
p = clockprocess( 2 )
p.start()
|
运行结果:
the time is wed nov 1 11:31:28 2017
the time is wed nov 1 11:31:30 2017
the time is wed nov 1 11:31:32 2017
the time is wed nov 1 11:31:34 2017
the time is wed nov 1 11:31:36 2017
(4)queue(队列)实现多进程数据传输
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:zhengzhengliu
import multiprocessing
#queue是多进程安全的队列,可以使用实现多进程之间的数据传递
def writer_proc(q):
try :
q.put( 1 ,block = false) #put方法插入数据到队列中
except :
pass
def reader_proc(q):
try :
print (q.get(block = false)) #get方法从队列中读取并删除一个元素
except :
pass
if __name__ = = "__main__" :
q = multiprocessing.queue()
writer = multiprocessing.process(target = writer_proc,args = (q,))
writer.start()
reader = multiprocessing.process(target = reader_proc,args = (q,))
reader.start()
reader.join()
writer.join()
|
运行结果:
1
希望本文所述对大家python程序设计有所帮助。
原文链接:https://blog.csdn.net/loveliuzz/article/details/78411458