任务例子:喝水、吃饭动作需要耗时1S

单任务:(耗时20s)

for i in range(10):

print('a正在喝水')

time.sleep(1)

print('a正在吃饭')

time.sleep(1)

一、多进程(耗时10s)

multiprocessing模块开启2个进程实现

代码如下:

import multiprocessing
import time def start(fuc):
for i in range(10):
print('正在{}'.format(fuc))
time.sleep(1) if __name__ == '__main__':
p1 = multiprocessing.Process(target=start,args=('喝水',))
p2 = multiprocessing.Process(target=start,args=('吃饭',))
p1.start()
p2.start()

二、多进程:如何共享资源

方案1:使用内置的消息队列Queue

def start(fuc,q):
for i in range(10):
# 向队列中加入一个信息:fuc
q.put(fuc)
time.sleep(1) if __name__ == '__main__':
# 定义一个消息队列,默认存储的队列信息为5个
q = multiprocessing.Queue(5)
p1 = multiprocessing.Process(target=start,args=('喝水',q))
p2 = multiprocessing.Process(target=start,args=('吃饭',q))
p1.start()
p2.start()
while True:
# 从队列中取出一个信息(先放入的先被取出来)
print(q.get())

三、多进程:进程池

当我们的任务很多时,或者任务数量不一定时,无限的创建进程会导致程序崩溃,可以固定使用几个进程来分配完成这些任务

(比如10个新app需要研发,3个研发团队,一个个的去完成)

def start(num):
print('--开始执行任务{}--'.format(num))
time.sleep(2)
print('--结束执行任务{}--'.format(num)) if __name__ == '__main__':
# 定义一个进程池,至多开启2个进程
pool = multiprocessing.Pool(2)
# 向进程池中添加新任务
pool.apply_async(start, args=(1,))
pool.apply_async(start, args=(2,))
pool.apply_async(start, args=(3,))
pool.apply_async(start, args=(4,))
# 关闭进程池
pool.close()
# 在此阻塞,等到进程池任务全部完成,子进程全部结束,再执行下面的代码
# 如不阻塞等待,主进程如果在下面终止了,则子进程全部终止
pool.join()

pool.apply_async等待进程池关闭后开启同步执行子进程
pool.apply本次添加进进程池的任务,添加的同时开始执行,结束了才开始下一次添加

最新文章

  1. PHP:Xdebug配置
  2. iOS homekit使用说明
  3. Windows Store App JavaScript 开发:文件选取器
  4. EM算法(1):K-means 算法
  5. background-clip,background-origin
  6. win10内网外网智能访问
  7. Jade之Includes
  8. 记一次纠结Macbook 重装OS X的系统
  9. linux + ffmpeg + eclipse 调试
  10. Cracking the coding interview 第二章问题及解答
  11. 极致精简的fragment实现导航栏切换demo
  12. 6最好的之一 HTML5/CSS3 演示(PPT)框架
  13. C#修改用户名
  14. DNS服务器搭建(主、从、缓)
  15. MySQL(六)之MySQL常用操作符
  16. Linux知识积累(2)dirname的使用方法
  17. Win10系统如何安装Linux Mint
  18. 简单比较init-method,afterPropertiesSet和BeanPostProcessor
  19. python-包及日志模块使用
  20. ZooKeeper系列

热门文章

  1. 下载数据到csv中(乱码),使用numpy , pandas读取失败 解决方案
  2. PHP 循环 - While 循环
  3. PHP array_splice() 函数
  4. 【原创】xenomai与VxWorks实时性对比(Jitter对比)
  5. 当asp.net core偶遇docker一(模型验证和Rabbitmq 二)
  6. 04-Thread的生命周期
  7. 解决Vue中element-ui输入框无法输入问题
  8. Python玩转各种多媒体,视频、音频到图片
  9. 【av68676164(p51-p53)】虚拟内存管理(2)
  10. 使用Spock 单元测试