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中decorator使用实例
Apr 14 Python
Python注释详解
Jun 01 Python
python中文件变化监控示例(watchdog)
Oct 16 Python
python实现BackPropagation算法
Dec 14 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
Jan 23 Python
python读取有密码的zip压缩文件实例
Feb 08 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 Python
如何在python中写hive脚本
Nov 08 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
Mar 06 Python
将Python代码打包成.exe可执行文件的完整步骤
May 12 Python
python获取对象信息的实例详解
Jul 07 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经典实用正则表达式小结
2017/05/04 PHP
utf8的编码算法 转载
2006/12/27 Javascript
jQuery下的几个你可能没用过的功能
2010/08/29 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
基于javascript实现图片预加载
2016/01/05 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
Python之多线程爬虫抓取网页图片的示例代码
2018/01/10 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
python lxml中etree的简单应用
2019/05/10 Python
Django REST framework 视图和路由详解
2019/07/19 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
基于python3生成标签云代码解析
2020/02/18 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
使用canvas压缩图片大小的方法示例
2019/08/02 HTML / CSS
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
计算机应用职专应届生求职信
2013/11/12 职场文书
英语专业应届生求职信范文
2013/11/15 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
会计演讲稿范文
2014/05/23 职场文书
早上好问候语大全
2015/11/10 职场文书
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python
Python自动化实战之接口请求的实现
2022/05/30 Python
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android