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错误提示:[Errno 24] Too many open files的分析与解决
Feb 16 Python
TensorFlow模型保存/载入的两种方法
Mar 08 Python
Pandas之drop_duplicates:去除重复项方法
Apr 18 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
python删除字符串中指定字符的方法
Aug 13 Python
Python多线程编程之多线程加锁操作示例
Sep 06 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
pytorch GAN伪造手写体mnist数据集方式
Jan 10 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
Jun 28 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
OpenCV-Python实现图像平滑处理操作
Jun 08 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
动态新闻发布的实现及其技巧
2006/10/09 PHP
thinkphp缓存技术详解
2014/12/09 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
PDO::commit讲解
2019/01/27 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
一些实用的jQuery代码片段收集
2011/07/12 Javascript
javascript设计模式之工厂模式示例讲解
2014/03/04 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
JavaScript中的getTimezoneOffset()方法使用详解
2015/06/10 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
2015/09/04 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
ES6入门教程之Class和Module详解
2017/05/17 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
Javascript异步编程async实现过程详解
2020/04/02 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
wxPython框架类和面板类的使用实例
2014/09/28 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
Python如何实现线程间通信
2020/07/30 Python
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
数据库面试要点基本概念
2013/10/31 面试题
护士的岗位职责
2013/12/04 职场文书
《中彩那天》教学反思
2014/02/22 职场文书
2015年幼儿园中班工作总结
2015/04/25 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
Redis Stream类型的使用详解
2021/11/11 Redis
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS