返回顶部
首页 > 资讯 > 后端开发 > Python >python 如何用map()函数创建多线程任务
  • 201
分享到

python 如何用map()函数创建多线程任务

2024-04-02 19:04:59 201人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

对于多线程的使用,我们经常是用thread来创建,比较繁琐. 在python中,可以使用map函数简化代码。map可以实现多任务的并发 简单说明map()实现多线程原理: tas

对于多线程的使用,我们经常是用thread来创建,比较繁琐. 在python中,可以使用map函数简化代码。map可以实现多任务的并发

简单说明map()实现多线程原理:


task = [‘任务1', ‘任务2', ‘任务3', …]

map 函数一手包办了序列操作、参数传递和结果保存等一系列的操作,map函数负责将线程分给不同的CPU。

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))

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

--结束END--

本文标题: python 如何用map()函数创建多线程任务

本文链接: https://lsjlt.com/news/123046.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python 如何用map()函数创建多线程任务
    对于多线程的使用,我们经常是用thread来创建,比较繁琐. 在Python中,可以使用map函数简化代码。map可以实现多任务的并发 简单说明map()实现多线程原理: tas...
    99+
    2024-04-02
  • C++ 函数库如何创建和使用多线程?
    答案:在 c++++ 中,可以使用 std::thread 函数库创建和使用多线程以实现并发编程。详细描述:使用 std::thread 创建新线程,并在子线程中执行指定代码。使用同步机...
    99+
    2024-04-18
    c++ 多线程 同步机制
  • Python中如何创建多线程?
    目录一、python线程的模块1.thread和threading模块2. Queue模块3.注意模块的选择二、Threading模块三、通过Threading.Thread类来创建...
    99+
    2023-01-06
    python 创建多线程 Python多线程编程 python多线程开发
  • 如何在python中创建多线程
    今天就跟大家聊聊有关如何在python中创建多线程,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几...
    99+
    2023-06-14
  • Python如何实现多线程处理任务
    小编给大家分享一下Python如何实现多线程处理任务,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!读取Excel数据 —> 发送到行政服务接口安全起见线上操作放在了晚上进行。运行时发现每条数据导入消耗1s多,晚上十点...
    99+
    2023-06-25
  • Java如何创建多线程的服务器
    这篇“Java如何创建多线程的服务器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java如何创建多线程的服务器”文章吧。回...
    99+
    2023-06-03
  • python如何使用map()函数
    这篇文章将为大家详细讲解有关python如何使用map()函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。map()map()是一个内置的Python函数,用于将一个函数应用于元素序列(如列表或字典)。...
    99+
    2023-06-03
  • 如何在 Golang 中创建线程安全的函数?
    在 golang 中创建线程安全的函数,可使用以下方法:使用 mutex 互斥锁,允许一次只有一个线程访问临界区。使用读写锁 (rwmutex),允许多个线程同时读取数据,但只有一个线程...
    99+
    2024-04-20
    golang 线程安全 并发访问
  • 如何用_beginthreadex()创建线程
    这篇文章主要讲解了“如何用_beginthreadex()创建线程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用_beginthreadex()创建线程”吧!一、使用_beginthr...
    99+
    2023-06-22
  • Python中如何使用map函数
    Python中如何使用map函数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。用法map(func, seq1[, seq2,…])map接收两个参数,第一个参数是函数名,...
    99+
    2023-06-04
  • 如何在python中创建新线程
    如何在python中创建新线程?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫...
    99+
    2023-06-14
  • Python中函数如何创建与调用
    这篇文章主要介绍了Python中函数如何创建与调用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。创建函数函数用 def 语句创建,语法如下:def&nbs...
    99+
    2023-06-29
  • Python中函数如何创建及调用
    这篇文章主要介绍了Python中函数如何创建及调用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中函数如何创建及调用文章都会有所收获,下面我们一起来看看吧。一、前言提到函数,大家会想到数学函数吧,函...
    99+
    2023-07-02
  • C++11中thread多线程编程如何创建
    这篇文章主要为大家展示了“C++11中thread多线程编程如何创建”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++11中thread多线程编程如何创建”这篇文章吧。1 线程创建与结束C++...
    99+
    2023-06-21
  • Java多线程是什么及如何创建
    本篇内容主要讲解“Java多线程是什么及如何创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多线程是什么及如何创建”吧!1、线程池:什么是线程池?咱们也不看长篇大论,通俗的来讲,线程池...
    99+
    2023-06-29
  • python如何使用Map()映射函数
    这篇文章主要介绍python如何使用Map()映射函数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Map()映射函数map()函数是个高阶函数(即使用函数作为参数或返回一个值作为其输出的函数)。其通用格式为map(...
    99+
    2023-06-27
  • python如何使用Map和Filter函数
    这篇文章主要介绍了python如何使用Map和Filter函数,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Map和Filter一旦掌握了lambda表达式,学习将它们与Ma...
    99+
    2023-06-27
  • Python中的map函数如何使用
    在Python中,map() 函数用于将一个函数应用到一个或多个可迭代对象的每个元素上,并返回一个将该函数应用到每个元素后的结果组成...
    99+
    2024-04-08
    python
  • 如何在python中创建守护线程
    这期内容当中小编将会给大家带来有关如何在python中创建守护线程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问...
    99+
    2023-06-14
  • 详解在Java中如何创建多线程程序
    创建多线程程序的第一种方式:创建Thread类的子类 java.lang.Thread类:是描述线程的类,我们想要实现多线程程序,就必须继承Thread类 实现步骤: 1.创建一个T...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作