当前位置:脚本大全 > > 正文

python 多进程的启动和停止(Python3.5多进程原理与用法实例分析)

时间:2021-10-22 07:38:13类别:脚本大全

python 多进程的启动和停止

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

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

python 多进程的启动和停止(Python3.5多进程原理与用法实例分析)

进程类:process

python 多进程的启动和停止(Python3.5多进程原理与用法实例分析)

示例及代码:

python 多进程的启动和停止(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

    上一篇下一篇

    猜您喜欢

    热门推荐