Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python concurrent.futures(并行编程 24)

python concurrent.futures(并行编程 24)

作者头像
用户5760343
发布于 2019-07-30 02:47:37
发布于 2019-07-30 02:47:37
6590
举报
文章被收录于专栏:sktjsktj

concurrent.futures.ProcessPoolExecutor(max_workers=5) as executor:executor.submit()

concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:executor.submit

import concurrent.futures import time

nlist=[1,2,3,4,5,6,7,8,9,10] def evaitem(x): rs=count(x) print("item "+str(x)+" reuslt"+str(rs)) def count(x): for i in range(0,10000000): i=i+1 return i*x if name=="main": stime=time.clock() for item in nlist: evaitem(item) print("sequential execution in "+str(time.clock()-stime),"seconds") stime1=time.clock() with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor: for item in nlist: executor.submit(evaitem,item) print("thread execution in "+str(time.clock()-stime1),"seconds") stime2 = time.clock() with concurrent.futures.ProcessPoolExecutor(max_workers=5) as executor: for item in nlist: executor.submit(evaitem, item) print("process execution in " + str(time.clock() - stime2), "seconds")

--------------------------------------------concurrent.futures.wait

阻塞主线程:ALL_COMPLETE,FIRST_COMPLETE,FIRST_EXCEPTION

from concurrent.futures import ThreadPoolExecutor,wait,as_completed import urllib.request URLS = ['http://www.163.com', 'https://www.baidu.com/', 'https://github.com/'] def load_url(url): with urllib.request.urlopen(url, timeout=60) as conn: print('%r page is %d bytes' % (url, len(conn.read())))

executor = ThreadPoolExecutor(max_workers=3)

f_list = [] for url in URLS: future = executor.submit(load_url,url) f_list.append(future) print(wait(f_list))

print('主线程')

运行结果:

'http://www.163.com' page is 662047 bytes 'https://www.baidu.com/' page is 227 bytes 'https://github.com/' page is 54629 bytes DoneAndNotDoneFutures(done={<Future at 0x2d0f898 state=finished returned NoneType>, <Future at 0x2bd0630 state=finished returned NoneType>, <Future at 0x2d27470 state=finished returned NoneType>}, not_done=set()) 主线程


shutdown 相当于close+join

add_done_callback()

from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor import requests import time,os def get_page(url): print('<%s> is getting [%s]'%(os.getpid(),url)) response = requests.get(url) if response.status_code==200: #200代表状态:下载成功了 return {'url':url,'text':response.text} def parse_page(res): res = res.result() print('<%s> is getting [%s]'%(os.getpid(),res['url'])) with open('db.txt','a') as f: parse_res = 'url:%s size:%s\n'%(res['url'],len(res['text'])) f.write(parse_res) if name == 'main': # p = ThreadPoolExecutor() p = ProcessPoolExecutor() l = [ 'http://www.baidu.com', 'http://www.baidu.com', 'http://www.baidu.com', 'http://www.baidu.com', ] for url in l: res = p.submit(get_page,url).add_done_callback(parse_page) #这里的回调函数拿到的是一个对象。得 # 先把返回的res得到一个结果。即在前面加上一个res.result() #谁好了谁去掉回调函数 # 回调函数也是一种编程思想。不仅开线程池用,开线程池也用 p.shutdown() #相当于进程池里的close和join print('主',os.getpid())

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.07.27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
concurrent.futures进行
Python中进行并发编程一般使用threading和multiprocessing模块,不过大部分的并发编程任务都是派生一系列线程,从队列中收集资源,然后用队列收集结果。在这些任务中,往往需要生成线程池,concurrent.futures模块对threading和multiprocessing模块进行了进一步的包装,可以很方便地实现池的功能。
py3study
2020/01/19
1.1K0
python concurrent.futures
1/ concurrent.futures模块 线程池:concurrent.futures.ThreadPoolExecutor(max_workers) 进程池:concurrent.futures.ProcessPoolExecutor(max_workers) 2、使用对比:进程的性能更好 import concurrent.futures import time number_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
用户5760343
2022/05/13
2450
python concurrent.futures
python因为其全局解释器锁GIL而无法通过线程实现真正的平行计算。这个论断我们不展开,但是有个概念我们要说明,IO密集型 vs. 计算密集型。 IO密集型:读取文件,读取网络套接字频繁。 计算密集型:大量消耗CPU的数学与逻辑运算,也就是我们这里说的平行计算。 而concurrent.futures模块,可以利用multiprocessing实现真正的平行计算。 核心原理是:concurrent.futures会以子进程的形式,平行的运行多个python解释器,从而令python程序可以利用多核CPU来
用户1225216
2018/03/05
1.5K0
使用concurrent.futures模块并发,实现进程池、线程池
一、关于concurrent.futures模块 Python标准库为我们提供了threading和multiprocessing模块编写相应的异步多线程/多进程代码。从Python3.2开始,标准库为我们提供了concurrent.futures模块,它提供了ThreadPoolExecutor和ProcessPoolExecutor两个类ThreadPoolExecutor和ProcessPoolExecutor继承了Executor,分别被用来创建线程池和进程池的代码。实现了对threading和mu
用户1214487
2018/01/24
9290
Python 高级并发3
本篇主要讲案例, 两个使用Concurrent.futures实现的并发, 一个是多线程, 一个是多进程。
用户1416054
2018/08/02
6120
Python 并发编程实战:优雅地使用 concurrent.futures
在 Python 多线程编程中,concurrent.futures 模块提供了一个高层的接口来异步执行可调用对象。今天,我们将通过一个循序渐进的案例,深入了解如何使用这个强大的工具。
Piper破壳
2024/12/25
2680
一文学会用python进行并行计算
Python实现多线程/多进程,大家常常会用到标准库中的threading和multiprocessing模块。
MeteoAI
2019/07/24
1.6K0
Python3中concurrent.futures模块介绍
第一次接触futures模块是在tornado中,tornado4.0版本使用futures频率很高,因为tornado本身的corouting的异步功能,是需要逻辑里面所调用的模块本身就支持异步才可以实现,而futures模块恰恰支持异步。在futures模块中,我们关心的是Executor和Future这两个类。
啃饼思录
2020/04/07
1.6K0
网络爬虫必备知识之concurrent.futures库
  python标准库为我们提供了threading和mutiprocessing模块实现异步多线程/多进程功能。从python3.2版本开始,标准库又为我们提供了concurrent.futures模块来实现线程池和进程池功能,实现了对threading和mutiprocessing模块的高级抽象,更大程度上方便了我们python程序员。
全栈程序员站长
2021/12/31
1.1K0
网络爬虫必备知识之concurrent.futures库
concurrent.futures模块(进程池/线程池)
本节主题是实现单线程下的并发,即只在一个主线程,并且很明显的是,可利用的cpu只有一个情况下实现并发,
全栈程序员站长
2022/07/21
1.5K0
concurrent.futures模块(进程池/线程池)
python并发 1:使用 futures 处理并发
现在这一篇还是 《流畅的python》读书笔记,译者在这里把future 翻译为“期物”,我觉得不太合适,既然future不能找到一个合适的词汇,暂时还是直接使用 future 吧。
goodspeed
2020/12/25
2K0
python并发之concurrent快速入门
导读:我很笨,但是我很快——计算机之所以计算能力如此出众,不在于其有多智能,而是因为它超快的执行速度,而多核心则可以进一步成倍的提高效率。在python中,concurrent库就是用于完成并发的模块之一。
luanhz
2020/04/01
3.8K0
线程池,进程池
concurrent.futures --- 启动并行任务 — Python 3.7.13 文档
Alan_1
2023/05/04
1K0
只需几行代码,即可实现多线程和多进程操作
原题 | PYTHON: A QUICK INTRODUCTION TO THE CONCURRENT.FUTURES MODULE
kbsc13
2019/08/23
4830
只需几行代码,即可实现多线程和多进程操作
python-concurrent.futures模块
concurrent.futures模块包含了threading和multiprocessing,及多线程和多进程功能。最近也是在写自己的信息收集和漏洞扫描程序。所以对concurrent.futures模块使用的比较多,这里也是想记录下。对于任务量不大的cpu和io运算,我一般只用threading来处理,而遇到大批量复杂的任务我会用多进程+多线程同时处理,比如在我最近开发的程序中要对大批量IP进行全端口扫描,就非常适合这种模式,运行效率很nice~
Tommonkey
2024/07/11
1031
「多线程大杀器」Python并发编程利器:ThreadPoolExecutor,让你一次性轻松开启多个线程,秒杀大量任务!
随着程序复杂度和数据量的不断增加,传统的同步编程方式已经无法满足开发人员的需求。异步编程随之产生,能够提供更高的并发性能和更好的资源利用率。Python的concurrent.futures模块是一个很好的异步编程工具,它提供了一组接口,可以方便地进行并发编程。
Python兴趣圈
2023/11/10
6.4K0
「多线程大杀器」Python并发编程利器:ThreadPoolExecutor,让你一次性轻松开启多个线程,秒杀大量任务!
Python中的并发编程(3)线程池、锁
concurrent.futures模块提供了线程池和进程池简化了多线程/进程操作。
一只大鸽子
2023/12/12
5300
Python中的并发编程(3)线程池、锁
Python并发编程应该使用哪个标准库?
并发编程是刚需,尤其是在多 I/O 操作时,多线程,协程,多进程三路英雄各显神通。多线程,协程属于并发操作,多进程属于并行操作,那么你是否清楚了什么是并发,什么是并行?
somenzz
2020/11/25
2.2K0
Python 并发编程:PoolExec
使用多线程(threading)和多进程(multiprocessing)完成常规的并发需求,在启动的时候 start、join 等步骤不能省,复杂的需要还要用 1-2 个队列。 随着需求越来越复杂,如果没有良好的设计和抽象这部分的功能层次,代码量越多调试的难度就越大。
py3study
2020/01/17
7840
python 使用期物处理并发
CPython 解释器本身就不是线程安全的,因此有全局解释器锁(GIL), 一次只允许使用一个线程执行 Python 字节码。因此,一个 Python 进程 通常不能同时使用多个 CPU 核心
Michael阿明
2022/01/05
3620
相关推荐
concurrent.futures进行
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档