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的批量远程管理和部署工具Fabric用法实例
Jan 23 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
Django实现自定义404,500页面教程
Mar 26 Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 Python
python TKinter获取文本框内容的方法
Oct 11 Python
Ubuntu下Python2与Python3的共存问题
Oct 31 Python
Python实现的各种常见分布算法示例
Dec 13 Python
在python中实现强制关闭线程的示例
Jan 22 Python
如何使用Python自动控制windows桌面
Jul 11 Python
python中删除某个元素的方法解析
Nov 05 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
python 算法题——快乐数的多种解法
May 27 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
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
使用eAccelerator加密PHP程序
2008/10/03 PHP
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
php读取大文件示例分享(文件操作类)
2014/04/13 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
php执行多个存储过程的方法【基于thinkPHP】
2016/11/08 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
csdn 博客的css样式 v3
2009/02/24 Javascript
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
React优化子组件render的使用
2019/05/12 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
2019/09/21 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
讲解Python中的标识运算符
2015/05/14 Python
一键搞定python连接mysql驱动有关问题(windows版本)
2016/04/23 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
Python中一个for循环循环多个变量的示例
2019/07/16 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
椰子猫砂:CatSpot
2018/08/27 全球购物
中职生自荐信
2013/10/13 职场文书
会计出纳岗位职责
2013/12/25 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
学校课外活动总结
2014/05/08 职场文书
职工擅自离岗检讨书
2014/09/23 职场文书
学校党的群众路线教育实践活动总结材料
2014/10/30 职场文书
学校开除通知书
2015/04/25 职场文书
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript