python 之 线程池实现并发

使用线程池实现高IO并发

模块:ThreadPoolExecutor, as_completed

测试代码如下:

#!/opt/python3/bin/python3

from concurrent.futures import ThreadPoolExecutor, as_completed
import time

def test(arg1, arg2, arg3):
    time.sleep(int(arg1))
    print(‘参数1:%s 参数2:%s 参数3:%s‘ % (arg1,arg2,arg3))
    return arg1

# 创建含3个线程的线程池
with ThreadPoolExecutor(3) as executor:
    # 生成所有任务
    all_task = [executor.submit(test, ag1, ag2, ag3) for ag1, ag2, ag3 in [(‘2‘,‘aa1‘,‘aa2‘),(‘3‘,‘bb1‘,‘bb2‘)]]

# 等待任务全部执行完毕后,使用for的result方法循环返回结果
for out in as_completed(result):
    mess = out.result()
    print(mess)

# as_completed 方法是等待result任务全部执行完毕
# result 方法是提取任务返回的结果

  

原文地址:https://www.cnblogs.com/zy6103/p/10963445.html

时间: 2025-01-04 06:44:33

python 之 线程池实现并发的相关文章

python自定义线程池

1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #!/usr/bin/env python 4 # -*- coding:utf-8 -*- 5 6 import queue 7 import threading 8 import contextlib 9 import time 10 11 StopEvent = object() 12 13 14 class ThreadPool(object): 15 16 def __init__(s

Python之路【第八篇】python实现线程池

线程池概念 什么是线程池?诸如web服务器.数据库服务器.文件服务器和邮件服务器等许多服务器应用都面向处理来自某些远程来源的大量短小的任务.构建服务器应用程序的一个过于简单的模型是:每当一个请求到达就创建一个新的服务对象,然后在新的服务对象中为请求服务.但当有大量请求并发访问时,服务器不断的创建和销毁对象的开销很大.所以提高服务器效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁,这样就引入了“池”的概念,“池”的概念使得人们可以定制一定量的资源,然后对这些资源

python实现线程池

什么是线程池?     诸如web服务器.数据库服务器.文件服务器和邮件服务器等许多服务器应用都面向处理来自某些远程来源的大量短小的任务.构建服务器应用程序的一个过于简单的模型是:每当一个请求到达就创建一个新的服务对象,然后在新的服务对象中为请求服务.但当有大量请求并发访问时,服务器不断的创建和销毁对象的开销很大.所以提高服务器效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁,这样就引入了"池"的概念,"池"的概念使得人们可以定制

《Python》线程池、携程

一.线程池(concurrent.futures模块) #1 介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 ProcessPoolExecutor: 进程池,提供异步调用 Both implement the same interface, which is defined by the abstract Executor class. #2 基本方法 #submit(fn, *args, **kwargs

如何处理线程池的并发?

[前言]我们从事Android开发以来,都自始自终被灌输着处理耗时的任务时要在非UI线程做.于是我们有了各种处理并发的编程手段,无论是自己用new Thread(Runnable)新起工作线程(Worker thread),还是利用Android提供的API(AsnyTask,CursorLaoder等)都是处理耗时任务的解决方案.但是在一个大型的应用程序中,如果我们需要处理数量很多且频繁的耗时任务时,如果还是采用之前的手段,无疑会带来很多不便:一来频繁创建销毁线程会造成资源(内存和Cpu)的浪

控制每次线程池的并发线程的最大个数

[本人原创],欢迎交流和分形技术,转载请附上如下内容: 作者:itshare [转自]http://www.cnblogs.com/itshare/ 1. 实验目的:       使用线程池的时候,有时候需要考虑服务器的最大线程数目和程序最快执行所有业务逻辑的取舍.并非逻辑线程越多也好,而且新的逻辑线程必须会在线程池的等待队列中等待 ,直到线程池中工作的线程执行完毕,才会有系统线程取出等待队列中的逻辑线程,进行CPU运算. 2.  解决问题:     <a>如果不考虑服务器实际可支持的最大并行

python之线程池

#!/user/bin/evn python # -*- coding:utf-8 -*- import threading import queue,time ''' 线程池的思路: 将任务依次放在队列里面 然后从队列取出任务交给线程执行 ''' stopEvent=object()#任务完了的标志---下面我们将任务包封装到元组中 class ThreadPool(object): def __init__(self,max_num): #创建队列 self.q=queue.Queue()

高并发、任务执行时间短的业务怎样使用线程池?并发不高、任务执行时间长的业务怎样使用线程池?并发高、业务执行时间长的业务怎样使用线程池?

(1)高并发.任务执行时间短的业务,线程池线程数可以设置为CPU核数+1,减少线程上下文的切换(2)并发不高.任务执行时间长的业务要区分开看:a)假如是业务时间长集中在IO操作上,也就是IO密集型的任务,因为IO操作并不占用CPU,所以不要让所有的CPU闲下来,可以加大线程池中的线程数目,让CPU处理更多的业务b)假如是业务时间长集中在计算操作上,也就是计算密集型任务,这个就没办法了,和(1)一样吧,线程池中的线程数设置得少一些,减少线程上下文的切换(3)并发高.业务执行时间长,解决这种类型任务

Python的线程池

#!/usr/bin/env python # -*- coding: utf-8 -*- """ concurrent 用于线程池和进程池编程而且更加容易,在Python3.2中才有. """ import sys from concurrent.futures import ThreadPoolExecutor, as_completed, wait from multiprocessing import Manager Manager().