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压缩文件夹内所有文件为zip文件的方法
Jun 20 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
使用Python3 编写简单信用卡管理程序
Dec 21 Python
梯度下降法介绍及利用Python实现的方法示例
Jul 12 Python
python占位符输入方式实例
May 27 Python
解决pyecharts在jupyter notebook中使用报错问题
Apr 23 Python
django中账号密码验证登陆功能的实现方法
Jul 15 Python
Python3离线安装Requests模块问题
Oct 13 Python
python不同系统中打开方法
Jun 23 Python
Python执行时间的几种计算方法
Jul 31 Python
python 如何区分return和yield
Sep 22 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 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
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
2019/01/15 PHP
实例讲解PHP表单处理
2019/02/15 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
Struts2+jquery.form.js实现图片与文件上传的方法
2016/05/05 Javascript
微信小程序前端源码逻辑和工作流
2016/09/25 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
layui表格实现代码
2017/05/20 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
vue全屏事件开发详解
2020/06/17 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
对python 自定义协议的方法详解
2019/02/13 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
.NET remoting中对象激活的两种方式
2015/06/08 面试题
祖国在我心中演讲稿500字
2014/05/04 职场文书
学生安全责任书模板
2014/07/25 职场文书
村创先争优活动总结
2014/08/28 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
年度考核个人总结
2015/03/06 职场文书
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js