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爬取Coursera课程资源的详细过程
Nov 04 Python
Python实现网站文件的全备份和差异备份
Nov 30 Python
Python使用logging结合decorator模式实现优化日志输出的方法
Apr 16 Python
Python 爬虫模拟登陆知乎
Sep 23 Python
python微信跳一跳系列之棋子定位颜色识别
Feb 26 Python
python实现文件助手中查看微信撤回消息
Apr 29 Python
Python读取表格类型文件代码实例
Feb 17 Python
Python HTMLTestRunner可视化报告实现过程解析
Apr 10 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
Python基于mediainfo批量重命名图片文件
Dec 29 Python
python opencv通过4坐标剪裁图片
Jun 05 Python
Elasticsearch 批量操作
Apr 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 trim 去除空字符的定义与语法介绍
2010/05/31 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
jQuery Ajax调用WCF服务详细教程
2015/03/31 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
微信小程序实现星星评分效果
2020/11/01 Javascript
[01:27:30]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python使用matplotlib实现在坐标系中画一个矩形的方法
2015/05/20 Python
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
python自动裁剪图像代码分享
2017/11/25 Python
python机器学习之神经网络(一)
2017/12/20 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
大三预备党员入党思想汇报
2014/01/08 职场文书
员工晚婚的请假条
2014/02/08 职场文书
大学生党员自我评价范文
2014/04/09 职场文书
节能减耗标语
2014/06/21 职场文书
幼师求职信
2014/06/23 职场文书
工作说明书格式
2014/07/29 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
学生会部长竞选稿
2015/11/19 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers