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中使用支持向量机(SVM)算法
Dec 26 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
Python实现通过继承覆盖方法示例
Jul 02 Python
对python3中, print横向输出的方法详解
Jan 28 Python
python批量下载抖音视频
Jun 17 Python
Django使用模板后无法找到静态资源文件问题解决
Jul 19 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
Python 词典(Dict) 加载与保存示例
Dec 06 Python
PyTorch中permute的用法详解
Dec 30 Python
pyecharts动态轨迹图的实现示例
Apr 17 Python
tensorflow 大于某个值为1,小于为0的实例
Jun 30 Python
Python图片检索之以图搜图
May 31 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
5.PHP的其他功能
2006/10/09 PHP
投票管理程序
2006/10/09 PHP
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
php查询ip所在地的方法
2014/12/05 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
php 静态属性和静态方法区别详解
2017/04/09 PHP
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
一个JQuery操作Table的代码分享
2012/03/30 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
JS添加或修改控件的样式(Class)实现方法
2016/10/15 Javascript
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
JS高级技巧(简洁版)
2018/07/29 Javascript
layui获取选中行数据的实例讲解
2018/08/19 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
htnl5利用svg页面高斯模糊的方法
2018/07/20 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
人事专员职责
2014/02/22 职场文书
公司承诺书范文
2014/05/19 职场文书
活动主持人开场白
2015/05/28 职场文书
2015小学师德工作总结
2015/07/21 职场文书
2015大一新生军训感言
2015/08/01 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript