怎样理解Python线程池

技术怎样理解Python线程池本篇文章给大家分享的是有关怎样理解Python线程池,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。总结一下自己总结的对Pyth

本篇文章给大家分享的是有关怎样理解计算机编程语言线程池,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

总结一下自己总结的对计算机编程语言线程池经验之谈,对于那些没有接触学习过编程语言或者多开发语言略懂的用户而言,Python语言是绝对的选择之一,并建议初学的程序员先从计算机编程语言开始学习编程。

importQueue,threading,SysFromStreamingOrthreadimporttime,urllib # workingthreadclassWorker(Thread): worker _ count=0de f _ _ init _ _(self,workQueue,resultQueue,timeout=0,**kwds):Thread .__init__(self,* * kwds)self。id=worker。worker _ count worker。worker _ count=1 self。设置守护程序(真)自身。workqueue=workqueueself。resultqueueself。超时=自己超时。start()defrun(self): ' ' ' get-some-work,do-some-work mainloopofworkkthreads ' ' ' white UE : try : callable,args,kwds=self。工作队列。get(time out=self。超时).

nbsp;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线程池,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/52738.html

(0)

相关推荐

  • hive里面怎么查所有报表中的数据(hive大数据怎么查询所有表)

    技术报表连hive时数据量比较大如何分页查询小编给大家分享一下报表连hive时数据量比较大如何分页查询,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Hive 提供了类似 Oracle 的 rownum

    攻略 2021年12月16日
  • 什么是脱式计算二年级,小学二年级的脱式计算是什么意思

    技术什么是脱式计算二年级,小学二年级的脱式计算是什么意思脱式计算即递等式计算,把计算过程完整写出来的运算,也就是脱离竖式的计算什么是脱式计算二年级。 在学习竖式计算之后,会学习到混合运算等可以连续计算的式子,在计算混合运

    生活 2021年10月25日
  • 如何登录服务器管理界面(服务器登录失败无法加载用户配置)

    技术高效简单的服务器登录配置方法是什么这篇文章主要介绍“高效简单的服务器登录配置方法是什么”,在日常操作中,相信很多人在高效简单的服务器登录配置方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

    攻略 2021年12月21日
  • 怎么编写C++程序并把它做成ipk包

    技术怎么编写C++程序并把它做成ipk包这篇文章主要讲解了“怎么编写C++程序并把它做成ipk包”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么编写C++程序并把它做成

    攻略 2021年11月30日
  • 如何使用node开发一款图集打包工具

    技术如何使用node开发一款图集打包工具这篇文章主要为大家展示了“如何使用node开发一款图集打包工具”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用node开发一款图

    攻略 2021年11月30日
  • visualstudio调试器怎么关闭(visualstudio怎么取消实时调试器)

    技术如何浅析Visual Studio调试中断点的设置本篇文章给大家分享的是有关如何浅析Visual Studio调试中断点的设置,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟

    攻略 2021年12月19日