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的chardet库获得文件编码并修改编码
Jan 22 Python
Python中的元类编程入门指引
Apr 15 Python
Python字符串详细介绍
May 09 Python
itchat接口使用示例
Oct 23 Python
ubuntu中配置pyqt4环境教程
Dec 27 Python
Python机器学习之SVM支持向量机
Dec 27 Python
使用python为mysql实现restful接口
Jan 05 Python
Python实现的字典值比较功能示例
Jan 08 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
python 字段拆分详解
Dec 17 Python
django filter过滤器实现显示某个类型指定字段不同值方式
Jul 16 Python
python flappy bird小游戏分步实现流程
Feb 15 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实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
2015/03/12 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
PHP PDOStatement::debugDumpParams讲解
2019/01/30 PHP
Js 刷新框架页的代码
2010/04/13 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
js验证框架之RealyEasy验证详解
2016/06/08 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
详解Vue的七种传值方式
2021/02/08 Vue.js
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
利用python爬取软考试题之ip自动代理
2017/03/28 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
Python class的继承方法代码实例
2020/02/14 Python
python程序需要编译吗
2020/06/19 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
python字典key不能是可以是啥类型
2020/08/04 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
大学生职业生涯规划书模板
2014/01/18 职场文书
教师节倡议书
2014/08/30 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
销售员态度差检讨书
2014/10/26 职场文书
小学生六年级作文之关于感恩
2019/08/16 职场文书