python 如何用map()函数创建多线程任务


Posted in Python onApril 07, 2021

对于多线程的使用,我们经常是用thread来创建,比较繁琐. 在Python中,可以使用map函数简化代码。map可以实现多任务的并发

简单说明map()实现多线程原理:

task = [‘任务1', ‘任务2', ‘任务3', …]

map 函数一手包办了序列操作、参数传递和结果保存等一系列的操作,map函数负责将线程分给不同的CPU。

python 如何用map()函数创建多线程任务

在 Python 中有个两个库包含了 map 函数: multiprocessing 和它鲜为人知的子库 multiprocessing.dummy.dummy 是 multiprocessing 模块的完整克隆,唯一的不同在于 multiprocessing 作用于进程,而 dummy 模块作用于线程。

代码如下:

from multiprocessing.dummy import Pool as ThreadPool
import os
import requests
import time
import numpy as np
# 文件夹位置
filepath = r'C:\Users\Administrator\Desktop\ceshi'
pool = ThreadPool(10)#开启线程数,即一次性抛出的请求数
time_list = []#用来计算时间
xml_list = []#数据集
pathDir = os.listdir(filepath)
for i, allDir in enumerate(pathDir):
 filename = os.path.join('%s%s' % (filepath + '\\', allDir))
 kk = open(filename, 'r', encoding='utf-8').read()
 data = kk.encode('utf-8')
 for k in range(10):
  xml_list.append(data)
def res(data):
 # 访问目标服务器地址
 url_host = 'https://mp.csdn.net/mdeditor#'
 start = time.clock()
 s = requests.post(url_host, data=data)
 end = time.clock()
 if s.status_code == 200:
  print(end-start)
  time_list.append(end-start)
 else:
  print('请求失败')
# 传入的参数,1为函数, 2为参数
result = pool.map(res, xml_list)
all_arr = np.array(time_list)
aver = np.mean(all_arr)
variance = np.var(all_arr)
mid = np.median(all_arr)
min_num = np.min(all_arr)
max_num = np.max(all_arr)
print('平均值 : '+ str(aver))
print('方差 : ' + str(variance))
print('中值 : ' + str(mid))
print('最小值 : ' + str(min_num))
print('最大值 : ' + str(max_num))

个人做的小测试,如果有错误的地方希望留言提出意见及建议。

补充:python多进程(multiprocessing)(map)

map的基本使用:

map函数一手包办了序列操作,参数传递和结果保存等一系列的操作。

from multiprocessing.dummy import Pool
poop = Pool(4)  # 4代表电脑是多少核的
results = pool.map(爬取函数,网址列表)

from multiprocessing.dummy import Pool as ThreadPool
import requests
import time
kv = {'user-agent':'Mozilla/5.0'}
def getsource(url):
 html = requests.get(url,headers=kv)
urls = []
for i in range(0,41):
 i = i*50
 newpage = 'https://tieba.baidu.com/f?kw=读书&ie=utf-8&pn=' + str(i)
 urls.append(newpage)
# 单线程爬取
time1 = time.time()
for each in urls:
 print(each)
 getsource(each)
time2 = time.time()
print('单线程耗时: ' + str(time2-time1))
# 多线程爬取
pool = ThreadPool(8)
time3 = time.time()
results = pool.map(getsource, urls)
pool.close()
pool.join()
time4 = time.time()
print('多线程所消耗时间:' + str(time4 - time3))

python 如何用map()函数创建多线程任务

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
python使用urllib2提交http post请求的方法
May 26 Python
浅析python递归函数和河内塔问题
Apr 18 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
Jul 25 Python
Pipenv一键搭建python虚拟环境的方法
May 22 Python
Python标准库shutil用法实例详解
Aug 13 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 Python
对python中各个response的使用说明
Mar 28 Python
浅谈keras中的keras.utils.to_categorical用法
Jul 02 Python
PyTorch安装与基本使用详解
Aug 31 Python
Python爬虫新手入门之初学lxml库
Dec 20 Python
如何用python批量调整视频声音
Dec 22 Python
python爬取2021猫眼票房字体加密实例
Feb 19 Python
python requests模块的使用示例
Apr 07 #Python
Python 使用dict实现switch的操作
Apr 07 #Python
Python 把两层列表展开平铺成一层(5种实现方式)
Apr 07 #Python
Python获取百度热搜的完整代码
详解Python小数据池和代码块缓存机制
Apr 07 #Python
浅谈Python列表嵌套字典转化的问题
Apr 07 #Python
python pyhs2 的安装操作
Apr 07 #Python
You might like
php zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
浅谈Javascript实现继承的方法
2015/07/06 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
JS实现3D图片旋转展示效果代码
2015/09/22 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
深入理解React高阶组件
2017/09/28 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
基于javascript实现贪吃蛇经典小游戏
2020/04/10 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
从零学Python之引用和类属性的初步理解
2014/05/15 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
django session完成状态保持的方法
2018/11/27 Python
django+echart数据动态显示的例子
2019/08/12 Python
Python facenet进行人脸识别测试过程解析
2019/08/16 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
Java如何格式化日期
2012/08/07 面试题
材料加工工程求职信
2014/02/19 职场文书
党风廉政承诺书
2014/03/27 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
谢师宴答谢词
2015/01/05 职场文书
党支部意见范文
2015/06/02 职场文书
个人道歉信大全
2019/04/11 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python