我的mac 4核,因此每次执行的时候同时开启4个线程处理:

# coding: utf-8import time
from multiprocessing import Pooldef long_time_task(name):print 'task %s starts running' % nametime.sleep(3)print 'task %s ends running --3 seconds' % nameif __name__ == '__main__':start = time.time()p = Pool()for i in range(10):  # CPU有几核,每次就取出几个进程p.apply_async(func=long_time_task, args=(i,))p.close()  # 调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了p.join()  # 对Pool对象调用join()方法会等待所有子进程执行完毕end = time.time()print('多进程(非阻塞)执行共需时间为:%.2f' % (end - start))

运行效果:

task 0 starts running
task 1 starts running
task 2 starts running
task 3 starts running
task 0 ends running --3 seconds
task 1 ends running --3 seconds
task 3 ends running --3 seconds
task 2 ends running --3 seconds
task 4 starts running
task 5 starts running
task 6 starts running
task 7 starts running
task 5 ends running --3 seconds
task 4 ends running --3 seconds
task 7 ends running --3 seconds
task 6 ends running --3 seconds
task 8 starts running
task 9 starts running
task 8 ends running --3 seconds
task 9 ends running --3 seconds
多进程(非阻塞)执行共需时间为:9.13

解释:

CPU先取出0-3号进程,执行完毕后,4~8号进程才开始执行。0-3号进程花了3秒钟,4~8号 进程也花了3秒。最后两个进程9,10又花了三秒,一共9秒。

也就意味着,我的代码可以这样写,当history_ddos(多进程消费的数据)是一个队列的时候,他会自动去队列里依次取数据:

    f = open("history_ddos.json", "r")history_ddos = json.load(f)f.close()# 10表示进程池中最多有10个进程一起执行p = Pool(10)for item in history_ddos:# find_ddos_botnet(item)p.apply_async(func=find_ddos_botnet(), args=(item,))p.close()p.join()

多个子进程并返回值 apply_async()本身就可以返回被进程调用的函数的返回值。上一个创建多个子进程的代码中,如果在函数func中返回一个值,那么pool.apply_async(func, (msg, ))的结果就是返回pool中所有进程的值的对象(注意是对象,不是值本身)。

import multiprocessingimport timedef func(msg):return multiprocessing.current_process().name + '-' + msgif __name__ == "__main__":pool = multiprocessing.Pool(processes=4) # 创建4个进程results = []for i in xrange(10):msg = "hello %d" %(i)results.append(pool.apply_async(func, (msg, )))pool.close() # 关闭进程池,表示不能再往进程池中添加进程,需要在join之前调用pool.join() # 等待进程池中的所有进程执行完毕print ("Sub-process(es) done.")for res in results:print (res.get())

结果:

Sub-process(es) done.
ForkPoolWorker-1-hello 0
ForkPoolWorker-2-hello 1
ForkPoolWorker-3-hello 2
ForkPoolWorker-1-hello 3
ForkPoolWorker-4-hello 4
ForkPoolWorker-1-hello 5
ForkPoolWorker-2-hello 6
ForkPoolWorker-1-hello 7
ForkPoolWorker-2-hello 8
ForkPoolWorker-3-hello 9

转载于:https://www.cnblogs.com/bonelee/p/9645429.html

python 多进程——使用进程池,多进程消费的数据)是一个队列的时候,他会自动去队列里依次取数据...相关推荐

  1. Python 多进程的进程池pool运行时报错:ValueError: Pool not running

    本文仅供学习交流使用,如侵立删!demo下载见文末 Python 多进程的进程池pool运行时报错:ValueError: Pool not running def main(self, num):& ...

  2. 【python】详解multiprocessing多进程-Pool进程池模块(二)

    [python]详解multiprocessing多进程-process模块(一) [python]详解multiprocessing多进程-Pool进程池模块(二) [python]详解multip ...

  3. 27 多进程之进程池Pool

    在使用Python进行系统管理的时候,特别时同时操作多个文件目录,或者远程控制多态主机并行操作,可以节约大量的时间.当被操作对象数目不大时,可以直接利用multiprocessing中的Process ...

  4. python中的进程池:multiprocessing.Pool()

    python中的进程池: 我们可以写出自己希望进程帮助我们完成的任务,然后把任务批量交给进程池 进程池帮助我们创建进程完成任务,不需要我们管理. 进程池:利用multiprocessing 下的Poo ...

  5. python笔记 7-8 进程池 进程通信 迭代器 消息队列 Queue 协程 和正则表达式

    day7 进程 进程池 进程通信 迭代器 消息队列 Queue 作用 用于多个进程间的通信 操作put放入消息(值) put_nowait() 放入值,不等待 如果队满,则报错 get获取消息(值) ...

  6. Python多进程4 进程池——Pool

    原文地址 学习来源 分类目录--多进程 是multiprocessing模块下的一个类,是一种创建多进程的更加简便的方式,可以更加方便的分配任务与传递参数. pool = mp.Pool(proces ...

  7. python多进程和进程池

    写在最前面: linux下可使用 fork 函数 通常使用 multiprocessing更常见 我们分别使用单进程和多进程处理run函数 # -*- coding: utf-8 -*- import ...

  8. python—多进程之进程池

    一.进程池 1.进程池定义: 进程池:可以提供指定数量的进程给用户使用,即当有新的请求提交到进程池中时,如果池未满,则会创建一个新的进程用来执行该请求;反之,如果池中的进程数已经达到规定最大值,那么该 ...

  9. processing python模式_详解python之多进程和进程池(Processing库)

    环境:win7+python2.7 一直想学习多进程或多线程,但之前只是单纯看一点基础知识还有简单的介绍,无法理解怎么去应用,直到前段时间看了github的一个爬虫项目涉及到多进程,多线程相关内容,一 ...

最新文章

  1. 2016年CCPC/ICPC比赛总结
  2. php 字符串转数组 提取中文 提取英文 字符串类型
  3. A value-added tax (VAT) IN UK
  4. axios关于针对请求时长策略设计的思考
  5. Mybatis+MySQL动态分页查询数据经典案例
  6. 信息学奥赛C++语言:素数的判定
  7. 施乐悄悄修复影响某些打印机中的严重缺陷
  8. deb方式安装openjdk8
  9. Array和ArrayList的区别与联系
  10. 单例模式中的线程安全问题
  11. SDK二次开发摄像头语音转发功能和语音对讲
  12. 2020年7月的自我鉴定(非技术篇)
  13. 健全营销体制是打造营销生态系统的命脉
  14. python根据身高计算标准体重_有谁知道如何根据身高计算标准体重
  15. 1每天Python小例-12306爬虫#WinError 2
  16. Final swfplayer安卓系统中播放网页中的播放flash动画
  17. 臻色调女装官网评价:专业人士展示行业数据
  18. 二零一九己亥年中秋快乐
  19. python 刷微信跳一跳分数遇到的bug
  20. word中的表格怎么按照章节自动插入题注(即表头的编号)

热门文章

  1. html视频怎么自动全屏播放,网页中用标签播放视频,可以全屏播放的代码肿么写?...
  2. ldd 3 重定向打印开启 misc-progs
  3. linux下使用free命令查看实际内存占用
  4. python遍历任意层次字典_Python递归中 return 代码陷阱
  5. idle和python区别_Python的IDLE与命令lin的区别
  6. abb机器人指令手册_ABB机器人编程之程序流程指令(含案例)
  7. 用-force –opengl 指令_苹果新系统ios14新功能汇总 轻点背面等小技巧怎么用
  8. python可变参数和关键字参数位置_python的位置参数、默认参数、关键字参数、可变参数区别...
  9. c++ 怎么读取rtf文件_最全集合!Word、PPT、Excel、PDF文件转换方法大全!建议收藏...
  10. php中ini set,php ini_set更改php.ini配置功能