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深入学习之上下文管理器
Aug 31 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
Python Requests库基本用法示例
Aug 20 Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 Python
在Python中使用Neo4j的方法
Mar 14 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
使用Tensorflow将自己的数据分割成batch训练实例
Jan 20 Python
使用TensorFlow搭建一个全连接神经网络教程
Feb 06 Python
tensorflow之tf.record实现存浮点数数组
Feb 17 Python
python脚本和网页有何区别
Jul 02 Python
详解pycharm配置python解释器的问题
Oct 15 Python
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
May 28 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生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
利用php绘制饼状图的实现代码
2013/06/07 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
jQuery显示和隐藏 常用的状态判断方法
2015/01/29 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
JS实现浏览上传文件的代码
2017/08/23 Javascript
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
详解Python requests 超时和重试的方法
2018/12/18 Python
python异步存储数据详解
2019/03/19 Python
python3.5安装python3-tk详解
2019/04/26 Python
python安装requests库的实例代码
2019/06/25 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
介绍一下Linux文件的记录形式
2012/04/18 面试题
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
党员干部廉洁承诺书
2014/05/28 职场文书
小学班主任工作总结2015
2015/04/07 职场文书
Java SSM配置文件案例详解
2021/08/30 Java/Android
git中cherry-pick命令的使用教程
2022/06/25 Servers