欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用python實(shí)現(xiàn)的線程池實(shí)例代碼

 更新時(shí)間:2018年01月06日 16:35:45   作者:Orisun  
這篇文章主要介紹了用python實(shí)現(xiàn)的線程池實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下

python3標(biāo)準(zhǔn)庫(kù)里自帶線程池ThreadPoolExecutor和進(jìn)程池ProcessPoolExecutor

如果你用的是python2,那可以下載一個(gè)模塊,叫threadpool,這是線程池。對(duì)于進(jìn)程池可以使用python自帶的multiprocessing.Pool。

當(dāng)然也可以自己寫一個(gè)threadpool。

# coding:utf-8
 
import Queue
import threading
import sys
import time
import math
 
 
class WorkThread(threading.Thread):
 
  def __init__(self, task_queue):
    threading.Thread.__init__(self)
    self.setDaemon(True)
    self.task_queue = task_queue
    self.start()
    self.idle = True
 
  def run(self):
    sleep_time = 0.01 # 第1次無(wú)任務(wù)可做時(shí)休息10毫秒
    multiply = 0
    while True:
      try:
        # 從隊(duì)列中取一個(gè)任務(wù)
        func, args, kwargs = self.task_queue.get(block=False)
        self.idle = False
        multiply = 0
        # 執(zhí)行之
        func(*args, **kwargs)
      except Queue.Empty:
        time.sleep(sleep_time * math.pow(2, multiply))
        self.idle = True
        multiply += 1
        continue
      except:
        print sys.exc_info()
        raise
 
 
class ThreadPool:
 
  def __init__(self, thread_num=10, max_queue_len=1000):
    self.max_queue_len = max_queue_len
    self.task_queue = Queue.Queue(max_queue_len) # 任務(wù)等待隊(duì)列
    self.threads = []
    self.__create_pool(thread_num)
 
  def __create_pool(self, thread_num):
    for i in xrange(thread_num):
      thread = WorkThread(self.task_queue)
      self.threads.append(thread)
 
  def add_task(self, func, *args, **kwargs):
    '''添加一個(gè)任務(wù),返回任務(wù)等待隊(duì)列的長(zhǎng)度
      調(diào)用該方法前最后先調(diào)用isSafe()判斷一下等待的任務(wù)是不是很多,以防止提交的任務(wù)被拒絕
    '''
    try:
      self.task_queue.put((func, args, kwargs))
    except Queue.Full:
      raise # 隊(duì)列已滿時(shí)直接拋出異常,不給執(zhí)行
    return self.task_queue.qsize()
 
  def isSafe(self):
    '''等待的任務(wù)數(shù)量離警界線還比較遠(yuǎn)
    '''
    return self.task_queue.qsize() < 0.9 * self.max_queue_len
 
  def wait_for_complete(self):
    '''等待提交到線程池的所有任務(wù)都執(zhí)行完畢
    '''
    #首先任務(wù)等待隊(duì)列要變成空
    while not self.task_queue.empty():
      time.sleep(1)
    # 其次,所以計(jì)算線程要變成idle狀態(tài)
    while True:
      all_idle = True
      for th in self.threads:
        if not th.idle:
          all_idle = False
          break
      if all_idle:
        break
      else:
        time.sleep(1)
 
 
if __name__ == '__main__':
  def foo(a, b):
    print a + b
    time.sleep(0.01)
  thread_pool = ThreadPool(10, 100)
  '''在Windows上測(cè)試不通過(guò),Windows上Queue.Queue不是線程安全的'''
  size = 0
  for i in xrange(10000):
    try:
      size = thread_pool.add_task(foo, i, 2 * i)
    except Queue.Full:
      print 'queue full, queue size is ', size
  time.sleep(2)

總結(jié)

以上就是本文關(guān)于用python實(shí)現(xiàn)的線程池實(shí)例代碼的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • Python DataFrame一列拆成多列以及一行拆成多行

    Python DataFrame一列拆成多列以及一行拆成多行

    這篇文章主要介紹了Python DataFrame一列拆成多列以及一行拆成多行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Django中的AutoField字段使用

    Django中的AutoField字段使用

    這篇文章主要介紹了Django中的AutoField字段使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python訪問(wèn)純真IP數(shù)據(jù)庫(kù)的代碼

    python訪問(wèn)純真IP數(shù)據(jù)庫(kù)的代碼

    項(xiàng)目中有這樣的需求,通過(guò)IP地址判斷客戶端是網(wǎng)通的還是電信的。從同事那拿了個(gè)純文本的IP純真數(shù)據(jù)庫(kù),用Python寫了一個(gè)小程序,感覺(jué)挺好的。
    2011-05-05
  • python 字符串和整數(shù)的轉(zhuǎn)換方法

    python 字符串和整數(shù)的轉(zhuǎn)換方法

    今天小編就為大家分享一篇python 字符串和整數(shù)的轉(zhuǎn)換方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python基于win32api實(shí)現(xiàn)鍵盤輸入

    python基于win32api實(shí)現(xiàn)鍵盤輸入

    這篇文章主要介紹了python基于win32api實(shí)現(xiàn)鍵盤輸入,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 詳解Python中for循環(huán)的使用方法

    詳解Python中for循環(huán)的使用方法

    這篇文章主要介紹了Python中for循環(huán)的使用方法,是Python入門中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Django實(shí)現(xiàn)帶進(jìn)度條的倒計(jì)時(shí)功能詳解

    Django實(shí)現(xiàn)帶進(jìn)度條的倒計(jì)時(shí)功能詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Django實(shí)現(xiàn)簡(jiǎn)單的帶進(jìn)度條的倒計(jì)時(shí)功能,可以在頁(yè)面加載后自動(dòng)開始計(jì)時(shí),下次計(jì)時(shí)需要手動(dòng)刷新頁(yè)面,需要的可以參考一下
    2023-04-04
  • Python發(fā)展史及網(wǎng)絡(luò)爬蟲

    Python發(fā)展史及網(wǎng)絡(luò)爬蟲

    Python 是一個(gè)高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言。這篇文章給大家介紹了python發(fā)展史及網(wǎng)絡(luò)爬蟲知識(shí),感興趣的朋友跟隨小編一起看看吧
    2019-06-06
  • Ruby使用eventmachine為HTTP服務(wù)器添加文件下載功能

    Ruby使用eventmachine為HTTP服務(wù)器添加文件下載功能

    這篇文章主要介紹了Ruby使用eventmachine為HTTP服務(wù)器添加文件下載功能的實(shí)例,同時(shí)作者也分享了Windows上eventmachine安裝報(bào)錯(cuò)問(wèn)題的解決方法,需要的朋友可以參考下
    2016-04-04
  • python?sklearn與pandas實(shí)現(xiàn)缺失值數(shù)據(jù)預(yù)處理流程詳解

    python?sklearn與pandas實(shí)現(xiàn)缺失值數(shù)據(jù)預(yù)處理流程詳解

    對(duì)于缺失值的處理,主要配合使用sklearn.impute中的SimpleImputer類、pandas、numpy。其中由于pandas對(duì)于數(shù)據(jù)探索、分析和探查的支持較為良好,因此圍繞pandas的缺失值處理較為常用
    2022-09-09

最新評(píng)論