本文内容:

  • python multiprocessing.dummy Pool多线程、进程任务队列使用
  • http压力测试简单示例

工作中有个常用的场景,比如现在需要下载10W张图片,我们不可能写个for循环一张一张的下载吧,又或者是我们做个简单的HTTP压力测试肯定是要使用多个,进程或者线程去做(每个请求handler,会有一个参数(所有的参数生成一个队列))然后把handler和队列map到Pool里面。肯定要用多线程或者是多进程,然后把这100W的队列丢给线程池或者进程池去处理在python中multiprocessing Pool进程池,以及multiprocessing.dummy非常好用,一般:


  • from multiprocessing import Pool as ProcessPool
  • from multiprocessing.dummy import Pool as ThreadPool

前者是多个进程,后者使用的是线程,之所以dummy(中文意思“假的”)
下面给出一个简单的http压力测试示例:

# _*_ coding:utf-8 _*_"""
This file a sample demo to do http stress test
"""
import requests
import time
from multiprocessing.dummy import Pool as ThreadPool
import urllibdef get_ret_from_http(url):"""cited from https://stackoverflow.com/questions/645312/what-is-the-quickest-way-to-http-get-in-python"""ret = requests.get(url)print ret.content# eg. result: {"error":false,"resultMap":{"check_ret":1},"success":true}def multi_process_stress_test():"""start up 4 thread to issue 1000 http requests to serverand test consume time:return:"""start = time.time()# 实际中url带参数的一般使用下面的make_url函数生成,这里示例就不用(前面写的现在懒得改了)url = """http://127.0.0.1:9325/shortvideo/checkBlack?url=http%3A%2F%2Fzbasecapture.bs2.yy.com%2F42269159_1499248536403_3.jpg&serial=abcdddddddd"""# generate task queue listlst_url = [url, url1]*50# use 5 threadspool = ThreadPool(5)# task and handles to poolret = pool.map(get_ret_from_http, lst_url)pool.close()pool.join()print 'time consume %s' % (time.time() - start)def make_url():"""generate url with parameterhttps://xy.com/index.php?url=http%3A//xy.xxx.com/22.jpg&SecretId=xy_123_movecited from https://stackoverflow.com/questions/2506379/add-params-to-given-url-in-pythonhttps://github.com/gruns/furl a good util for url operator:return:"""para = {"SecretId": "xy_123_move", "url": "http://xy.xxx.com/22.jpg"}print urllib.urlencode(para)#url=http%3A%2F%2Fxy.xxx.com%2F22.jpg&SecretId=xy_123_movebase_url = 'xy.com/index.php'return 'https://%s?%s' % (base_url, '&'.join('%s=%s' % (k, urllib.quote(str(v))) for k, v in para.iteritems()))if __name__ == '__main__':# get_ret_from_http()multi_process_stress_test()# print make_url()pass

下面在给出另一个简单的示例,handler函数每次睡眠随机的秒数(根据指定的参数),我们可以选择使用进程或者是线程来完成队列中所有的任务(一般CPU密集型的选择用多进程,IO密集型的可以选择多线程)

# _*_ coding:utf-8 _*_
"""
This file is about thread(dummy)/process pool
"""
from multiprocessing import Pool as ProcessPool
from multiprocessing.dummy import Pool as ThreadPool
import logging
from time import sleep, time
from random import randrangelogging.basicConfig(level=logging.DEBUG,format='%(levelname)s %(asctime)s %(processName)s %(message)s',datefmt='%Y-%m-%d %I:%M:%S')def handler(sec):logging.debug('now I will sleep %s S', sec)sleep(sec)def get_pool(b_dummy=True, num=4):"""if b_dummy is True then get ThreadPool, or get process pool:param b_dummy: dummy thread Pool or Process pool:param num: thread or process num:return: pool object"""if b_dummy:pool = ThreadPool(num)else:pool = ProcessPool(num)return pooldef test_dummy_thread_pool():start_time = time()# generate task queue parameters listslst_sleep_sec = [randrange(3, 10) for i in xrange(10)]pool = get_pool(b_dummy=False)results = pool.map(handler, lst_sleep_sec)logging.debug(results)pool.close()pool.join()logging.debug('time consume %s', time() - start_time)passif __name__ == '__main__':test_dummy_thread_pool()pass

工作中使用的语言比较多写过C++,java, 部分html+js, python的.由于用到语言的间歇性,比如还几个月没有使用python了许多技巧就忘记了,于是我把一些常用的python代码分类项目在本人的github中,当实际中用到某一方法的时候就把常用的方法放到一个文件中方便查询。

python multiprocessing dummy Pool 使用相关推荐

  1. python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例

    本文简单介绍python进程模块multiprocessing提供的进程池和线程池功能. 进程池: 进程池的使用有四种方式:apply_async.apply.map_async.map.其中appl ...

  2. python文字处理dummy_python中multiprocessing、multiprocessing.dummy和threading用法笔记

    一.multiprocessing 用法参考地址:multiprocessing用法 首先解释一个误区: 进程池的大小是每次同时执行的进程数,但是并不会影响主进程申请进程的数量.主进程申请多进程量不等 ...

  3. multiprocessing.dummy python使用笔记

    multiprocessing.dummy python 笔记 代码 pool.map pool.imap pool.imap_unordered 代码 pool.map 不管chunksize多大, ...

  4. python多路分支_用于多个参数的python multiprocessing pool.map

    在python多处理库中,是否有pool.map的变体支持多个参数? text ="test" def harvester(text, case): X = case[0] tex ...

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

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

  6. python Multiprocessing Pool 应用

    1.pool创建多个进程 from multiprocessing import Pool import time def test(p):print(p)time.sleep(3) if __nam ...

  7. python multiprocessing模块

    python multiprocessing模块 原文地址 multiprocessing multiprocessing支持子进程.通信和共享数据.执行不同形式的同步,提供了Process.Queu ...

  8. python multiprocessing — 基于进程的并行

    概述 multiprocessing 是一个用与 threading 模块相似API的支持产生进程的包. multiprocessing 包同时提供本地和远程并发,使用子进程代替线程,有效避免 Glo ...

  9. [转]浅谈 python multiprocessing(多进程)下如何共享变量

    2019独角兽企业重金招聘Python工程师标准>>> 1.问题: 群中有同学贴了如下一段代码,问为何 list 最后打印的是空值? from multiprocessing imp ...

  10. python 进程池pool使用详解

    和选用线程池来关系多线程类似,当程序中设置到多进程编程时,Python 提供了更好的管理多个进程的方式,就是使用进程池. 在利用 Python 进行系统管理的时候,特别是同时操作多个文件目录,或者远程 ...

最新文章

  1. centos mysql安装_mysql yum源安装
  2. android从放弃到精通 第六天 excellent
  3. oracle database 9i/10g/11g 编程艺术 源代码下载
  4. golang中的strings.Fields
  5. C语言编程之格式化输出函数printf()说明
  6. SQL Server安装计划
  7. jquery's json url
  8. Ext JS 6学习文档-第8章-主题和响应式设计
  9. Android开发之来电电话挂断实现
  10. PDF粘贴到word的英文字母的间距很宽,很奇怪
  11. 企业微信与视频号裂变如何做私域运营?
  12. 安装 yoman, campass, generator, bower, grunt,
  13. OpenCV MPR.DLL WNetRestoreConnectionA相关问题
  14. 计算机办公模式是什么,华为Mate 10“电脑模式”告诉你什么是真正的“移动办公”...
  15. 百度地图的一些踩坑 marker网络图片不显示
  16. 短网址生成+域名检测+短网址还原+域名防红四合一前端源码
  17. 深度学习-【语义分割】学习笔记4 膨胀卷积(Dilated convolution)
  18. android实现上班打卡记录日历查看功能
  19. 广丰计算机技术学院,广丰区五都镇中学祝晓旺——信息技术教育的拓荒者
  20. ORACLE存储过程RECORD数据类型的使用

热门文章

  1. 关于“socket:10106 无法加载或初始化请求的服务提供程序”问题的解决方法
  2. Uber天使投资人杰森卡拉卡尼斯投资…
  3. 开心网外挂开发之 三
  4. 字节面试算法题:用集合中的数凑小于target的最大数(Java实现,各类用例均通过)
  5. mysql远程备份_mysql实现自动远程备份一办法
  6. MySQL初始密码获取
  7. 电子计算机与其它计算机工具的本质区别是,电子计算机与其他计算工具的本质区别是...
  8. 人民银行软件开发中心-IT技术
  9. 手机奥维地图在测量中的应用
  10. rk3399 android 9.0 skype强制切换到前置摄像头