成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

對Python線程池進(jìn)行詳細(xì)說明

開發(fā) 后端
本文對Python線程池進(jìn)行詳細(xì)說明介紹,IDE選擇及編碼的解決方案進(jìn)行了一番詳細(xì)的描述,實為Python初學(xué)者必讀的Python學(xué)習(xí)經(jīng)驗心得。

下面給大家總結(jié)一下自己總結(jié)的對Python線程池經(jīng)驗之談,對于那些沒有接觸學(xué)習(xí)過編程語言或者多開發(fā)語言略懂的用戶而言,Python語言絕對是***的選擇之一,并建議初學(xué)的程序員先從Python開始學(xué)習(xí)編程。

  1. import Queue, threading, sys   
  2. from threading import Thread   
  3. import time,urllib   
  4. # working thread   
  5. class Worker(Thread):   
  6.    worker_count = 0   
  7.    def __init__( self, workQueue, resultQueue, timeout = 0, **kwds):   
  8.        Thread.__init__( self, **kwds )   
  9.        self.id = Worker.worker_count   
  10.        Worker.worker_count += 1   
  11.        self.setDaemon( True )   
  12.        self.workQueue = workQueue   
  13.        self.resultQueue = resultQueue   
  14.        self.timeout = timeout   
  15.        self.start( )   
  16.    def run( self ):   
  17.        ''' the get-some-work, do-some-work main loop of worker threads '''   
  18.        while True:   
  19.            try:   
  20.                callable, args, kwds = self.workQueue.get(timeout=self.timeout)   
  21.                res = callable(*args, **kwds)   
  22.                print "worker[%2d]: %s" % (self.id, str(res) )   
  23.                self.resultQueue.put( res )   
  24.            except Queue.Empty:   
  25.                break   
  26.            except :   
  27.                print 'worker[%2d]' % self.id, sys.exc_info()[:2]   
  28.                   
  29. class WorkerManager:   
  30.    def __init__( self, num_of_workers=10timeout = 1):   
  31.        self.workQueue = Queue.Queue()   
  32.        self.resultQueue = Queue.Queue()   
  33.        self.workers = []   
  34.        self.timeout = timeout   
  35.        self._recruitThreads( num_of_workers )   
  36.    def _recruitThreads( self, num_of_workers ):   
  37.        for i in range( num_of_workers ):   
  38.            worker = Worker( self.workQueue, self.resultQueue, self.timeout )   
  39.            self.workers.append(worker)   
  40.    def wait_for_complete( self):   
  41.        # ...then, wait for each of them to terminate:   
  42.        while len(self.workers):   
  43.            worker = self.workers.pop()   
  44.            worker.join( )   
  45.            if worker.isAlive() and not self.workQueue.empty():   
  46.                self.workers.append( worker )   
  47.        print "All jobs are are completed."   
  48.    def add_job( self, callable, *args, **kwds ):   
  49.        self.workQueue.put( (callable, args, kwds) )   
  50.    def get_result( self, *args, **kwds ):   
  51.        return self.resultQueue.get( *args, **kwds )  

Worker類是一個Python線程池,不斷地從workQueue隊列中獲取需要執(zhí)行的任務(wù),執(zhí)行之,并將結(jié)果寫入到resultQueue中。這里的workQueue和resultQueue都是現(xiàn)成安全的,其內(nèi)部對各個線程的操作做了互斥。當(dāng)從workQueue中獲取任務(wù)超時,則線程結(jié)束。

WorkerManager負(fù)責(zé)初始化Python線程池,提供將任務(wù)加入隊列和獲取結(jié)果的接口,并能等待所有任務(wù)完成。一個典型的測試?yán)尤缦拢?0個線程去下載一個固定頁面的內(nèi)容,實際應(yīng)用時應(yīng)該是執(zhí)行不同的任務(wù)。

  1. def test_job(id, sleep = 0.001 ):   
  2.    try:   
  3.        urllib.urlopen('[url]https://www.gmail.com/[/url]').read()   
  4.    except:   
  5.        print '[%4d]' % id, sys.exc_info()[:2]   
  6.    return id   
  7. def test():   
  8.    import socket   
  9.    socket.setdefaulttimeout(10)   
  10.    print 'start testing'   
  11.    wm = WorkerManager(10)   
  12.    for i in range(500):   
  13.        wm.add_job( test_job, i, i*0.001 )   
  14.    wm.wait_for_complete()   
  15.    print 'end testing'  

【編輯推薦】

  1. 有關(guān)Python系統(tǒng)文件進(jìn)行介紹指導(dǎo)
  2. 如何正確的使用Python函數(shù)
  3. Python 構(gòu)建工具進(jìn)行詳細(xì)介紹分析
  4. PythonAndroid淺析Python優(yōu)勢所在
  5. 如何使用Python模塊解析配置文件?
責(zé)任編輯:chenqingxiang 來源: CSDN博客
相關(guān)推薦

2010-01-05 17:06:46

JSON 數(shù)據(jù)

2010-02-22 13:20:58

Python中文問題

2009-12-08 09:00:14

WCF線程

2010-01-08 13:16:54

Json入門文檔

2009-12-08 17:34:25

WCF的配置

2010-02-22 16:26:21

Python編輯

2010-02-22 17:54:07

Python工具

2009-12-11 14:21:55

VS2010程序

2009-12-29 15:30:15

ADO Insert

2010-02-22 16:40:22

Python解釋器

2009-12-28 09:26:09

ADO對象

2009-12-29 15:22:40

ADO.NET類庫

2010-01-04 10:39:33

ADO.NET描述

2009-12-29 10:45:09

ADO的連接方式

2010-02-23 10:14:29

Python 源代碼

2010-02-23 11:18:25

Python 操作符

2010-02-04 14:41:52

Android菜單類型

2014-09-16 09:57:56

INotifyProp

2009-12-07 18:06:46

WCF框架

2010-03-09 10:11:34

Linux掛載命令
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美日韩国产一区二区三区 | 免费一二区| 久久ww| 午夜在线 | 精品国产一区二区三区日日嗨 | 午夜寂寞影院列表 | 人人做人人澡人人爽欧美 | 黄色片大全在线观看 | 伊人在线视频 | 欧美激情va永久在线播放 | 欧美激情亚洲激情 | 国产精品区二区三区日本 | 久久三级影院 | 成人精品 | 天天色天天色 | av在线播放不卡 | 久久精品国产99国产 | 日本精品免费在线观看 | 91视频网 | 国产一极毛片 | 成人欧美一区二区三区 | 国产精品久久久久久婷婷天堂 | 91精品一区二区三区久久久久 | 亚洲男人天堂 | 91精品国产91久久综合桃花 | 一区二区三区四区在线免费观看 | 91精品在线播放 | 亚洲精品麻豆 | 国产精品视频在线播放 | www视频在线观看 | 一区二区三区不卡视频 | 色婷婷久久久亚洲一区二区三区 | 欧美精品中文字幕久久二区 | 久久高清 | 欧美在线一区二区三区 | 精品一区二区久久久久久久网站 | 亚洲国产欧美在线人成 | 91九色porny首页最多播放 | 成人综合在线视频 | 精品久久久久久久人人人人传媒 | 伊人成人免费视频 |