服务器之家

服务器之家 > 正文

Python3.5多进程原理与用法实例分析

时间:2021-06-12 00:49     来源/作者:loveliuzz

本文实例讲述了python3.5多进程原理与用法。分享给大家供大家参考,具体如下:

Python3.5多进程原理与用法实例分析

进程类:process

Python3.5多进程原理与用法实例分析

示例及代码:

Python3.5多进程原理与用法实例分析

(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

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部