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操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
python实现根据用户输入从电影网站获取影片信息的方法
Apr 07 Python
Python输出PowerPoint(ppt)文件中全部文字信息的方法
Apr 28 Python
python开发之thread实现布朗运动的方法
Nov 11 Python
Python分析学校四六级过关情况
Nov 22 Python
python实现随机调用一个浏览器打开网页
Apr 21 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
django富文本编辑器的实现示例
Apr 10 Python
Python 一键获取百度网盘提取码的方法
Aug 01 Python
python3.7 openpyxl 删除指定一列或者一行的代码
Oct 08 Python
python3.8动态人脸识别的实现示例
Sep 21 Python
Python自动化之批量处理工作簿和工作表
Jun 03 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重新实现PHP脚本引擎内置函数
2007/03/06 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
2011/05/07 PHP
PHP cURL获取微信公众号access_token的实例
2018/04/28 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
2010/05/24 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
jQuery实现的简洁下拉菜单导航效果代码
2015/08/26 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
简述JS控制台的使用
2018/07/15 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
Python 的 with 语句详解
2014/06/13 Python
Python读取网页内容的方法
2015/07/30 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
2017/04/24 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
dpn网络的pytorch实现方式
2020/01/14 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
用python对oracle进行简单性能测试
2020/12/05 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
大学生职业生涯规划范文
2013/12/31 职场文书
主题党日活动总结
2014/07/08 职场文书
临床医学专业求职信
2014/08/08 职场文书
团党委领导干部党的群众路线教育实践活动个人对照检查材料思想汇
2014/10/05 职场文书
幸福来敲门观后感
2015/06/04 职场文书
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
Python中的 Set 与 dict
2022/03/13 Python