终于理清线程池

笔记,主要是理解多线程的线程池,关注标红的部分

不要在意process函数是干什么的,只理解为一个函数即可,最后一句是释放该线程

本例就是,最多20个线程,不断地利用和释放

import threading
# 程序执行入口
def execute(self):
    result = self.fetch_hosts()
    if not result:
        return None
    
# 
def process(self, hostname, thread_obj):

    try:
        server_response = PluginApi.get_server_info(hostname, self.remote_user, self.remote_port)
        if not server_response.status:
            raise Exception(server_response.message)
        params = urllib.urlencode({"data": json.dumps(server_response.data)})
        # 将获取的主机信息发送到API处理,但API返回数据未做任何处理
        self.url_request(self.push_resource, ‘POST‘, params)
    except Exception, e:
        log.write_error_log(‘[%s][process],%s‘ % (hostname, str(e)))
    finally:

如果不这样做,那么并发10000个甚至更多,

就会来多少请求,创建多少个线程,服务器可能瞬间崩溃。

比如:

def run(n):
    print ‘run‘

for i in range(1000):
    t = threading.Thread(target=run, args=(i,))
    t.start()

这个例子就会瞬间起1000个线程

时间: 2024-10-24 14:19:26

终于理清线程池的相关文章

线程的控制和线程池

一.WaitHandle: ”.Net 中提供了一些线程间更自由通讯的工具,他们提供了通过"信号"进行通讯的机制 可以通过ManualResetEvent,AutoResetEvent(他是在开门并且一个 WaitOne 通过后自动关门)来进行线程间的通讯 waitOne:    等待开门 Set:           开门 Reset:       关门 static void Main(string[] args) { ManualResetEvent mre = new Manu

【转】一个故事帮你理解线程和线程池

原文:http://www.code123.cc/2486.html 真的很有意思~~看完理解也可以深一点 我是一个线程, 我一出生就被编了个号: 0x3704,  然后被领到一个昏暗的屋子里,  这里我发现了很多和我一模一样的同伴. 我身边的同伴0x6900 待的时间比较长, 他带着沧桑的口气对我说: 我们线程的宿命就是处理包裹. 把包裹处理完以后还得马上回到这里,否则可能永远回不来了. 我一脸懵懂,包裹,什么包裹? ”不要着急,马上你就会明白了, 我们这里是不养闲人的.“ 果然,没多久,屋子

Linux高性能server规划——处理池和线程池

进程池和线程池 池的概念 由于server的硬件资源"充裕".那么提高server性能的一个非常直接的方法就是以空间换时间.即"浪费"server的硬件资源.以换取其执行效率.这就是池的概念. 池是一组资源的集合,这组资源在server启动之初就全然被创建并初始化,这称为静态资源分配. 当server进入正是执行阶段.即開始处理客户请求的时候.假设它须要相关的资源,就能够直接从池中获取,无需动态分配.非常显然,直接从池中取得所需资源比动态分配资源的速度要快得多.由于

java使用默认线程池踩过的坑(三)

云智慧(北京)科技有限公司 陈鑫 重新启动线程池 TaskManager public class TaskManager implements Runnable { -.. public TaskManager (Setrunners) { super(); this.runners = runners; executeTasks(runners); } private voidexecuteTasks(Set<FileTask> runners) { for (FileTask task

java线程池框架源代码分析

相关类Executor,Executors.AbstractExecutorService.ExecutorService Executor:整个线程池运行者框架的顶层接口. 定义了一个execute方法.整个线程运行者框架的核心方法. public interface Executor { void execute(Runnable command); } ExecutorService:这是一个接口它继承自Executor,定义了shutdown.shutdownNow,awaitTermi

关于线程池,那些你还不知道的事

一.背景 最近在学习线程相关的知识,然后顺理成章少不了学习线程池,刚开始在没有深入的学习之前,感觉线程池是很神秘的东西,而且完全想不到怎么才能实现一个自己的线程池,然后还能保证它的可用性,然后就一直琢磨,琢磨了一周才不多,也是网上各种查资料,终于明白了线程池的原理,也自己手写一个线程池,来加深印象,那么本文我们就来聊一聊关于线程池的知识,希望更多的猿友能看到,从此对线程池有一个清晰直观的认识. 二.概念解析 1.什么是线程池 线程池的基本思想是一种对象池,在程序启动时就开辟一块内存空间,里面存放

你所了解的Java线程池

在jvm中,线程是一个宝贵的资源,创建与销毁都会抢占宝贵的内存资源,为了有效的重用线程,我们用线程池来管理线程,让创建的线程进行复用. JDK提供了一套Executor框架,帮助我们管理线程,核心成员如下: 它们都在java.util.concurrent包中,是JDK并发包的核心类,其中,Executor是一个interface,只有一个execute方法;Executors扮演着线程工厂的角色;ThreadPoolExecutor表示一个线程池,用来管理我们的线程. ThreadPoolEx

通过实验研究“线程池中线程数目的变化规律” --- 下有不错的线程池使用 原理 总结

通过实验研究“线程池中线程数目的变化规律” 自从看了老赵关于线程池的实验以后,我就想学着做一个类似的实验,验证自己的理解,现在终于做好了,请大家指正. 一般情况下我们都使用Thread类创建线程,因为通过Thread对象可以对线程进行灵活的控制.但创建线程和销毁线程代价不菲,过多的线程会消耗掉大量的内存和CPU资源,假如某段时间内突然爆发了100个短小的线程,创建和销毁这些线程就会消耗很多时间,可能比线程本身运行的时间还长.为了改善这种状况,.NET提供了一种称之为线程池(Thread Pool

Java核心(二)深入理解线程池ThreadPool

本文你将获得以下信息: 线程池源码解读 线程池执行流程分析 带返回值的线程池实现 延迟线程池实现 为了方便读者理解,本文会由浅入深,先从线程池的使用开始再延伸到源码解读和源码分析等高级内容,读者可根据自己的情况自主选择阅读顺序和需要了解的章节. 一.线程池优点 线程池能够更加充分的利用CPU.内存.网络.IO等系统资源,线程池的主要作用如下: 利用线程池可以复用线程,控制最大并发数: 实现任务缓存策略和拒绝机制: 实现延迟执行 阿里巴巴Java开发手册强制规定:线程资源必须通过线程池提供,如下图