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系列之教你如何根据图片生成字符画
May 23 Python
Python3通过Luhn算法快速验证信用卡卡号的方法
May 14 Python
Windows平台Python连接sqlite3数据库的方法分析
Jul 12 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
python生成lmdb格式的文件实例
Nov 08 Python
对python 中class与变量的使用方法详解
Jun 26 Python
python实现两张图片拼接为一张图片并保存
Jul 16 Python
python2爬取百度贴吧指定关键字和图片代码实例
Aug 14 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 Python
Python中logging日志的四个等级和使用
Nov 17 Python
python中count函数知识点浅析
Dec 17 Python
Python基础之数据类型知识汇总
May 18 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
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
2013/01/23 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
小程序实现多选框功能
2018/10/30 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
python 获取文件列表(或是目录例表)
2009/03/25 Python
python数据结构之二叉树的遍历实例
2014/04/29 Python
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
int在python中的含义以及用法
2019/06/27 Python
python做反被爬保护的方法
2019/07/01 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
教师档案管理制度
2014/01/23 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
总经理检讨书
2014/09/15 职场文书
教师师德工作总结2015
2015/07/22 职场文书
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB