最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python自定義進程池實例分析【生產者、消費者模型問題】

 更新時間:2016年09月19日 10:34:04   作者:RQSLT  
這篇文章主要介紹了Python自定義進程池,結合實例分析了Python使用自定義進程池實現(xiàn)的生產者、消費者模型問題,需要的朋友可以參考下

本文實例分析了Python自定義進程池。分享給大家供大家參考,具體如下:

代碼說明一切:

#encoding=utf-8
#author: walker
#date: 2014-05-21
#function: 自定義進程池遍歷目錄下文件
from multiprocessing import Process, Queue, Lock
import time, os
#消費者
class Consumer(Process):
  def __init__(self, queue, ioLock):
    super(Consumer, self).__init__()
    self.queue = queue
    self.ioLock = ioLock
  def run(self):
    while True:
      task = self.queue.get()  #隊列中無任務時,會阻塞進程
      if isinstance(task, str) and task == 'quit':
        break;
      time.sleep(1)  #假定任務處理需要1秒鐘
      self.ioLock.acquire()
      print( str(os.getpid()) + ' ' + task)
      self.ioLock.release()
    self.ioLock.acquire()
    print 'Bye-bye'
    self.ioLock.release()
#生產者
def Producer():
  queue = Queue()  #這個隊列是進程/線程安全的
  ioLock = Lock()
  subNum = 4  #子進程數(shù)量
  workers = build_worker_pool(queue, ioLock, subNum)
  start_time = time.time()
  for parent, dirnames, filenames in os.walk(r'D:\test'):
    for filename in filenames:
      queue.put(filename)
      ioLock.acquire()
      print('qsize:' + str(queue.qsize()))
      ioLock.release()
      while queue.qsize() > subNum * 10: #控制隊列中任務數(shù)量
        time.sleep(1)
  for worker in workers:
    queue.put('quit')
  for worker in workers:
    worker.join()
  ioLock.acquire()
  print('Done! Time taken: {}'.format(time.time() - start_time))
  ioLock.release()
#創(chuàng)建進程池
def build_worker_pool(queue, ioLock, size):
  workers = []
  for _ in range(size):
    worker = Consumer(queue, ioLock)
    worker.start()
    workers.append(worker)
  return workers
if __name__ == '__main__':
  Producer()

ps:

self.ioLock.acquire()
...
self.ioLock.release()

可用:

with self.ioLock:
  ...

替代。

再來一個好玩的例子:

#encoding=utf-8
#author: walker
#date: 2016-01-06
#function: 一個多進程的好玩例子
import os, sys, time
from multiprocessing import Pool
cur_dir_fullpath = os.path.dirname(os.path.abspath(__file__))
g_List = ['a']
#修改全局變量g_List
def ModifyDict_1():
  global g_List
  g_List.append('b')
#修改全局變量g_List
def ModifyDict_2():
  global g_List
  g_List.append('c')
#處理一個
def ProcOne(num):
  print('ProcOne ' + str(num) + ', g_List:' + repr(g_List))
#處理所有
def ProcAll():
  pool = Pool(processes = 4)
  for i in range(1, 20):
    #ProcOne(i)
    #pool.apply(ProcOne, (i,))
    pool.apply_async(ProcOne, (i,))
  pool.close()
  pool.join()
ModifyDict_1() #修改全局變量g_List
if __name__ == '__main__':
  ModifyDict_2() #修改全局變量g_List
  print('In main g_List :' + repr(g_List))
  ProcAll()

Windows7 下運行的結果:

λ python3 demo.py
In main g_List :['a', 'b', 'c']
ProcOne 1, g_List:['a', 'b']
ProcOne 2, g_List:['a', 'b']
ProcOne 3, g_List:['a', 'b']
ProcOne 4, g_List:['a', 'b']
ProcOne 5, g_List:['a', 'b']
ProcOne 6, g_List:['a', 'b']
ProcOne 7, g_List:['a', 'b']
ProcOne 8, g_List:['a', 'b']
ProcOne 9, g_List:['a', 'b']
ProcOne 10, g_List:['a', 'b']
ProcOne 11, g_List:['a', 'b']
ProcOne 12, g_List:['a', 'b']
ProcOne 13, g_List:['a', 'b']
ProcOne 14, g_List:['a', 'b']
ProcOne 15, g_List:['a', 'b']
ProcOne 16, g_List:['a', 'b']
ProcOne 17, g_List:['a', 'b']
ProcOne 18, g_List:['a', 'b']
ProcOne 19, g_List:['a', 'b']

Ubuntu 14.04下運行的結果:

In main g_List :['a', 'b', 'c']
ProcOne 1, g_List:['a', 'b', 'c']
ProcOne 2, g_List:['a', 'b', 'c']
ProcOne 3, g_List:['a', 'b', 'c']
ProcOne 5, g_List:['a', 'b', 'c']
ProcOne 4, g_List:['a', 'b', 'c']
ProcOne 8, g_List:['a', 'b', 'c']
ProcOne 9, g_List:['a', 'b', 'c']
ProcOne 7, g_List:['a', 'b', 'c']
ProcOne 11, g_List:['a', 'b', 'c']
ProcOne 6, g_List:['a', 'b', 'c']
ProcOne 12, g_List:['a', 'b', 'c']
ProcOne 13, g_List:['a', 'b', 'c']
ProcOne 10, g_List:['a', 'b', 'c']
ProcOne 14, g_List:['a', 'b', 'c']
ProcOne 15, g_List:['a', 'b', 'c']
ProcOne 16, g_List:['a', 'b', 'c']
ProcOne 17, g_List:['a', 'b', 'c']
ProcOne 18, g_List:['a', 'b', 'c']
ProcOne 19, g_List:['a', 'b', 'c']

可以看見Windows7下第二次修改沒有成功,而Ubuntu下修改成功了。據uliweb作者limodou講,原因是Windows下是充重啟實現(xiàn)的子進程;Linux下是fork實現(xiàn)的。

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python URL操作技巧總結》、《Python圖片操作技巧總結》、《Python數(shù)據結構與算法教程》、《Python Socket編程技巧總結》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • python中pip的使用方法詳解

    python中pip的使用方法詳解

    pip 是 Python 的默認包管理工具,隨 Python 3.x 版本一同安裝,它使得安裝和管理 Python 包變得非常簡單,本文將介紹 pip 的基本使用方法、常用命令及其代碼示例,需要的朋友可以參考下
    2024-12-12
  • python正則實現(xiàn)提取電話功能

    python正則實現(xiàn)提取電話功能

    這篇文章主要為大家詳細介紹了python正則實現(xiàn)提取電話功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 基于Python?wxPython開發(fā)文件管理工具

    基于Python?wxPython開發(fā)文件管理工具

    這篇文章主要為大家詳細介紹了如何基于wxPython開發(fā)一個文件管理工具,該工具提供了多種實用功能,代碼結構清晰,易于理解和擴展,需要的可以了解下
    2025-02-02
  • 集成開發(fā)環(huán)境Pycharm的安裝及模板設置圖文教程

    集成開發(fā)環(huán)境Pycharm的安裝及模板設置圖文教程

    PyCharm是一種Python的集成開發(fā)環(huán)境,帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高效率的工具,這篇文章主要介紹了集成開發(fā)環(huán)境Pycharm的安裝及模板設置,需要的朋友可以參考下
    2022-07-07
  • Python實現(xiàn)的棧、隊列、文件目錄遍歷操作示例

    Python實現(xiàn)的棧、隊列、文件目錄遍歷操作示例

    這篇文章主要介紹了Python實現(xiàn)的棧、隊列、文件目錄遍歷操作,結合實例形式分析了Python數(shù)據結構中棧與隊列的定義、使用,以及文件目錄的遍歷相關操作技巧,需要的朋友可以參考下
    2019-05-05
  • Python 3實戰(zhàn)爬蟲之爬取京東圖書的圖片詳解

    Python 3實戰(zhàn)爬蟲之爬取京東圖書的圖片詳解

    最近在學習python3,下面這篇文章主要給大家介紹了關于Python3實戰(zhàn)爬蟲之爬取京東圖書圖片的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-10-10
  • 在django項目中導出數(shù)據到excel文件并實現(xiàn)下載的功能

    在django項目中導出數(shù)據到excel文件并實現(xiàn)下載的功能

    這篇文章主要介紹了在django項目中導出數(shù)據到excel文件并實現(xiàn)下載的功能,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python使用PDFMiner解析PDF代碼實例

    Python使用PDFMiner解析PDF代碼實例

    本篇文章主要介紹了Python使用PDFMiner解析PDF代碼實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Python實現(xiàn) PS 圖像調整中的亮度調整

    Python實現(xiàn) PS 圖像調整中的亮度調整

    這篇文章主要介紹了Python實現(xiàn) PS 圖像調整中的亮度調整 ,需要的朋友可以參考下
    2019-06-06
  • Python 批量操作設備的實現(xiàn)步驟

    Python 批量操作設備的實現(xiàn)步驟

    本文將結合實例代碼,介紹Python 批量操作設備的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07

最新評論

哈密市| 若羌县| 涞源县| 集安市| 斗六市| 九江市| 夏河县| 资中县| 盘锦市| 伊吾县| 达尔| 余姚市| 新平| 达拉特旗| 商水县| 墨竹工卡县| 遂川县| 新巴尔虎左旗| 比如县| 壶关县| 建瓯市| 广汉市| 清原| 临夏市| 伊宁县| 林州市| 卓尼县| 新蔡县| 沙雅县| 斗六市| 辽中县| 密山市| 新泰市| 隆林| 四子王旗| 贞丰县| 红桥区| 乌什县| 和顺县| 曲阜市| 黄梅县|