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中处理字符串之isalpha()方法的使用
May 18 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
python实现图片批量压缩程序
Jul 23 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
python绘制地震散点图
Jun 18 Python
python3中eval函数用法使用简介
Aug 02 Python
Python 类的私有属性和私有方法实例分析
Sep 29 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
Dec 26 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
django 实现后台从富文本提取纯文本
Jul 02 Python
Python2.6版本pip安装步骤解析
Aug 17 Python
如何通过安装HomeBrew来安装Python3
Dec 23 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
解决GD中文乱码问题
2007/02/14 PHP
php生成缩略图的类代码
2008/10/02 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
ES6中非常实用的新特性介绍
2016/03/10 Javascript
javascript中arguments,callee,caller详解
2016/03/16 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
分析python服务器拒绝服务攻击代码
2014/01/16 Python
python3实现表白神器
2019/04/09 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
巴西服装和鞋子购物网站:Marisa
2018/10/25 全球购物
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
C#面试问题
2016/07/29 面试题
海南地接欢迎词
2014/01/14 职场文书
保密承诺书
2014/03/27 职场文书
校长寄语大全
2014/04/09 职场文书
保证书范文大全
2014/04/28 职场文书
党的群众路线领导班子整改方案
2014/09/27 职场文书
瘦西湖导游词
2015/02/03 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
单位接收证明格式
2015/06/18 职场文书
信息简报范文
2015/07/21 职场文书
国家助学金受助感言
2015/08/01 职场文书
学生病假条范文
2015/08/17 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书