怎样理解Python线程池
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,本篇文章给大家分享的是有关怎样理解Python线程池,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。总结一下自己总结的对Python线程池
千家信息网最后更新 2025年01月18日怎样理解Python线程池
本篇文章给大家分享的是有关怎样理解Python线程池,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
总结一下自己总结的对Python线程池经验之谈,对于那些没有接触学习过编程语言或者多开发语言略懂的用户而言,Python语言是绝对的选择之一,并建议初学的程序员先从Python开始学习编程。
import Queue, threading, sys from threading import Thread import time,urllib # working thread class Worker(Thread): worker_count = 0 def __init__( self, workQueue, resultQueue, timeout = 0, **kwds): Thread.__init__( self, **kwds ) self.id = Worker.worker_count Worker.worker_count += 1 self.setDaemon( True ) self.workQueue = workQueue self.resultQueue = resultQueue self.timeout = timeout self.start( ) def run( self ): ''' the get-some-work, do-some-work main loop of worker threads ''' while True: try: callable, args, kwds = self.workQueue.get(timeout=self.timeout) res = callable(*args, **kwds) print "worker[%2d]: %s" % (self.id, str(res) ) self.resultQueue.put( res ) except Queue.Empty: break except : print 'worker[%2d]' % self.id, sys.exc_info()[:2] class WorkerManager: def __init__( self, num_of_workers=10, timeout = 1): self.workQueue = Queue.Queue() self.resultQueue = Queue.Queue() self.workers = [] self.timeout = timeout self._recruitThreads( num_of_workers ) def _recruitThreads( self, num_of_workers ): for i in range( num_of_workers ): worker = Worker( self.workQueue, self.resultQueue, self.timeout ) self.workers.append(worker) def wait_for_complete( self): # ...then, wait for each of them to terminate: while len(self.workers): worker = self.workers.pop() worker.join( ) if worker.isAlive() and not self.workQueue.empty(): self.workers.append( worker ) print "All jobs are are completed." def add_job( self, callable, *args, **kwds ): self.workQueue.put( (callable, args, kwds) ) def get_result( self, *args, **kwds ): return self.resultQueue.get( *args, **kwds )
Worker类是一个Python线程池,不断地从workQueue队列中获取需要执行的任务,执行之,并将结果写入到resultQueue中。这里的workQueue和resultQueue都是现成安全的,其内部对各个线程的操作做了互斥。当从workQueue中获取任务超时,则线程结束。
WorkerManager负责初始化Python线程池,提供将任务加入队列和获取结果的接口,并能等待所有任务完成。一个典型的测试例子如下,它用10个线程去下载一个固定页面的内容,实际应用时应该是执行不同的任务。
def test_job(id, sleep = 0.001 ): try: urllib.urlopen('[url]https://www.gmail.com/[/url]').read() except: print '[%4d]' % id, sys.exc_info()[:2] return id def test(): import socket socket.setdefaulttimeout(10) print 'start testing' wm = WorkerManager(10) for i in range(500): wm.add_job( test_job, i, i*0.001 ) wm.wait_for_complete() print 'end testing'
以上就是怎样理解Python线程池,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
线程
任务
语言
学习
更多
知识
篇文章
结果
队列
编程
不同
实用
安全
经验之谈
不断
例子
典型
内容
实际
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
linux如何自动关闭服务器
库存管理数据库
中国网络安全法征文
网络安全都涉及哪些学科
泰安移动应用软件开发
最新模式制度系统软件开发
影楼怎么建立储存服务器
2020通信与网络技术
网络安全四原则是什么
网络安全公约有哪些
上海晟众软件开发
同江市网络安全和信息化委员会
网络安全关系国家
松江区优势软件开发产品介绍
网络安全分析师职位
如何把电脑当服务器开伺服
网络安全为网络生命线
滨州有软件开发薪资
软件开发的配置项都要有基线嘛
从互联网到科技霸主
java 塞班软件开发
服务器怎么给硬件传数据
应聘中国移动网络技术工程师
杭州云搜网络技术爱采购
网络安全落实情况总结
软件开发中的方法有哪些
数据库程序设计测试第5章
无忧h2服务器
有哪些网络安全口号
北京指炫网络技术