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

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

 更新時間:2016年09月19日 10:34:04   作者:RQSLT  
這篇文章主要介紹了Python自定義進程池,結(jié)合實例分析了Python使用自定義進程池實現(xiàn)的生產(chǎ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()  #隊列中無任務(wù)時,會阻塞進程
      if isinstance(task, str) and task == 'quit':
        break;
      time.sleep(1)  #假定任務(wù)處理需要1秒鐘
      self.ioLock.acquire()
      print( str(os.getpid()) + ' ' + task)
      self.ioLock.release()
    self.ioLock.acquire()
    print 'Bye-bye'
    self.ioLock.release()
#生產(chǎn)者
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: #控制隊列中任務(wù)數(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 下運行的結(jié)果:

λ 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下運行的結(jié)果:

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下修改成功了。據(jù)uliweb作者limodou講,原因是Windows下是充重啟實現(xiàn)的子進程;Linux下是fork實現(xiàn)的。

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

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

相關(guān)文章

  • python中pip的使用方法詳解

    python中pip的使用方法詳解

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

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

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

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

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

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

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

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

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

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

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

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

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

    Python使用PDFMiner解析PDF代碼實例

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

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

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

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

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

最新評論

渭源县| 台安县| 巴林左旗| 大兴区| 宜宾市| 苏尼特左旗| 仲巴县| 枣强县| 宝清县| 蚌埠市| 大田县| 从化市| 水富县| 麻栗坡县| 巍山| 玛多县| 刚察县| 北川| 新化县| 湟源县| 海南省| 邹城市| 巴东县| 龙泉市| 大名县| 贵州省| 松滋市| 东乡| 增城市| 江华| 南召县| 梨树县| 临沧市| 阿拉尔市| 潞西市| 吉林市| 湟中县| 杂多县| 兴隆县| 汕尾市| 搜索|