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 urlopen 使用小示例
Sep 06 Python
python中日期和时间格式化输出的方法小结
Mar 19 Python
用Python制作检测Linux运行信息的工具的教程
Apr 01 Python
Python中取整的几种方法小结
Jan 06 Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 Python
三步实现Django Paginator分页的方法
Jun 11 Python
python读取word 中指定位置的表格及表格数据
Oct 23 Python
Python Tkinter模块 GUI 可视化实例
Nov 20 Python
使用python动态生成波形曲线的实现
Dec 04 Python
Python基于traceback模块获取异常信息
Jul 23 Python
Python 如何定义匿名或内联函数
Aug 01 Python
Python实例方法、类方法、静态方法区别详解
Sep 05 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
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
2015/07/01 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
xtree.js 代码
2007/03/13 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
react-router4 嵌套路由的使用方法
2017/07/24 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
详解Python中的序列化与反序列化的使用
2015/06/30 Python
python利用拉链法实现字典方法示例
2017/03/25 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
德国网上超市:myTime.de
2019/08/26 全球购物
介绍一下Python下range()函数的用法
2013/11/07 面试题
会计专业自我鉴定范文
2013/12/29 职场文书
《和我们一样享受春天》教学反思
2014/02/07 职场文书
就业协议书怎么填
2014/04/11 职场文书
优秀语文教师事迹
2014/05/18 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
2014年学校工作总结
2014/11/20 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
导游词之天下银坑景区
2019/11/21 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
深入理解Pytorch微调torchvision模型
2021/11/11 Python