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

Python多進(jìn)程機(jī)制實(shí)例詳解

 更新時(shí)間:2015年07月02日 11:15:54   作者:tianmo2010  
這篇文章主要介紹了Python多進(jìn)程機(jī)制,以實(shí)例形式詳細(xì)分析了Python多進(jìn)程機(jī)制的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了Python多進(jìn)程機(jī)制。分享給大家供大家參考。具體如下:

在以前只是接觸過(guò)PYTHON的多線程機(jī)制,今天搜了一下多進(jìn)程,相關(guān)文章好像不是特別多??戳藥灼≡嚵艘话?。程序如下,主要內(nèi)容就是通過(guò)PRODUCER讀一個(gè)本地文件,一行一行的放到隊(duì)列中去。然后會(huì)有相應(yīng)的WORKER從隊(duì)列中取出這些行。

import multiprocessing
import os
import sys
import Queue
import time
def writeQ(q,obj):
    q.put(obj,True,None)
    print "put size: ",q.qsize()
def readQ(q):
    ret = q.get(True,1)
    print "get size: ",q.qsize()
    return ret
def producer(q):
    time.sleep(5)  #讓進(jìn)行休息幾秒 方便ps命令看到相關(guān)內(nèi)容
    pid = os.getpid()
    handle_file = '/home/dwapp/joe.wangh/test/multiprocess/datafile'
    with open(handle_file,'r') as f:   #with...as... 這個(gè)用法今天也是第一次看到的
        for line in f:
            print "producer <" ,pid , "> is doing: ",line
            writeQ(q,line.strip())
    q.close()
def worker(q):
    time.sleep(5)  #讓進(jìn)行休息幾秒 方便ps命令看到相關(guān)內(nèi)容
    pid = os.getpid()
    empty_count = 0
    while True:
        try:
            task = readQ(q)
            print "worker <" , pid , "> is doing: " ,task
            '''
            如果這里不休眠的話 一般情況下所有行都會(huì)被同一個(gè)子進(jìn)程讀取到 為了使實(shí)驗(yàn)效果更加清楚 在這里讓每個(gè)進(jìn)程讀取完
一行內(nèi)容時(shí)候休眠5s 這樣就可以讓其他的進(jìn)程到隊(duì)列中進(jìn)行讀取
            '''
            time.sleep(5)  
        except Queue.Empty:
            empty_count += 1
            if empty_count == 3:
                print "queue is empty, quit"
                q.close()
                sys.exit(0)
def main():
    concurrence = 3
    q = multiprocessing.Queue(10)
    funcs = [producer , worker]
    for i in range(concurrence-1):
        funcs.append(worker)
    for item in funcs:
        print str(item)
    nfuncs = range( len(funcs) )
    processes = []    
    for i in nfuncs:
        p = multiprocessing.Process(target=funcs[i] , args=(q,))
        processes.append(p)
    print "concurrence worker is : ",concurrence," working start"
    for i in nfuncs:
        processes[i].start()
    for i in nfuncs:
        processes[i].join()
    print "all DONE"
if __name__ == '__main__':
    main()

實(shí)驗(yàn)結(jié)果如下:

dwapp@pttest1:/home/dwapp/joe.wangh/test/multiprocess>python 1.py 
<function producer at 0xb7b9141c>
<function worker at 0xb7b91454>
<function worker at 0xb7b91454>
<function worker at 0xb7b91454>
concurrence worker is : 3 working start
producer < 28320 > is doing: line 1
put size: 1
producer < 28320 > is doing: line 2
put size: 2
producer < 28320 > is doing: line 3
put size: 3
producer < 28320 > is doing: line 4
put size: 3
producer < 28320 > is doing: line 5
get size: 3
put size: 4
worker < 28321 > is doing: line 1
get size: 3
worker < 28322 > is doing: line 2
get size: 2
worker < 28323 > is doing: line 3
get size: 1
worker < 28321 > is doing: line 4
get size: 0
worker < 28322 > is doing: line 5
queue is empty, quit
queue is empty, quit
queue is empty, quit
all DONE

程序運(yùn)行期間在另外一個(gè)窗口進(jìn)行ps命令 可以觀測(cè)到一些進(jìn)程的信息

dwapp@pttest1:/home/dwapp/joe.wangh/test/multiprocess>ps -ef | grep python
dwapp  13735 11830 0 Nov20 pts/12  00:00:05 python
dwapp  28319 27481 8 14:04 pts/0  00:00:00 python 1.py
dwapp  28320 28319 0 14:04 pts/0  00:00:00 python 1.py
dwapp  28321 28319 0 14:04 pts/0  00:00:00 python 1.py
dwapp  28322 28319 0 14:04 pts/0  00:00:00 python 1.py
dwapp  28323 28319 0 14:04 pts/0  00:00:00 python 1.py
dwapp  28325 27849 0 14:04 pts/13  00:00:00 grep python
dwapp@pttest1:/home/dwapp/joe.wangh/test/multiprocess>ps -ef | grep python
dwapp  13735 11830 0 Nov20 pts/12  00:00:05 python     #此時(shí)28320進(jìn)程 也就是PRODUCER進(jìn)程已經(jīng)結(jié)束
dwapp  28319 27481 1 14:04 pts/0  00:00:00 python 1.py
dwapp  28321 28319 0 14:04 pts/0  00:00:00 python 1.py
dwapp  28322 28319 0 14:04 pts/0  00:00:00 python 1.py
dwapp  28323 28319 0 14:04 pts/0  00:00:00 python 1.py
dwapp  28328 27849 0 14:04 pts/13  00:00:00 grep python
dwapp@pttest1:/home/dwapp/joe.wangh/test/multiprocess>ps -ef | grep python
dwapp  13735 11830 0 Nov20 pts/12  00:00:05 python
dwapp  28319 27481 0 14:04 pts/0  00:00:00 python 1.py
dwapp  28321 28319 0 14:04 pts/0  00:00:00 python 1.py
dwapp  28322 28319 0 14:04 pts/0  00:00:00 python 1.py
dwapp  28323 28319 0 14:04 pts/0  00:00:00 [python] <defunct>  #這里應(yīng)該是代表28323進(jìn)程(WORKER)已經(jīng)運(yùn)行結(jié)束了
dwapp  28331 27849 0 14:04 pts/13  00:00:00 grep python
dwapp@pttest1:/home/dwapp/joe.wangh/test/multiprocess>ps -ef | grep python
dwapp  13735 11830 0 Nov20 pts/12  00:00:05 python
dwapp  28337 27849 0 14:05 pts/13  00:00:00 grep python

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

相關(guān)文章

  • python求素?cái)?shù)示例分享

    python求素?cái)?shù)示例分享

    這篇文章主要介紹了python求素?cái)?shù)示例,打印出素?cái)?shù)列表,需要的朋友可以參考下
    2014-02-02
  • 利用Python?Matlab繪制曲線圖的簡(jiǎn)單實(shí)例

    利用Python?Matlab繪制曲線圖的簡(jiǎn)單實(shí)例

    們經(jīng)常會(huì)遇到這種情況,有一個(gè)數(shù)學(xué)函數(shù),我們希望了解他的圖像,這個(gè)時(shí)候使用python 的matplotlib就可以幫助我們,下面這篇文章主要介紹了利用Python?Matlab繪制曲線圖的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • Python讀取GSMap數(shù)據(jù)的問(wèn)題

    Python讀取GSMap數(shù)據(jù)的問(wèn)題

    這篇文章主要介紹了Python讀取GSMap數(shù)據(jù)的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 圖文詳解如何利用PyTorch實(shí)現(xiàn)圖像識(shí)別

    圖文詳解如何利用PyTorch實(shí)現(xiàn)圖像識(shí)別

    這篇文章主要給大家介紹了關(guān)于如何利用PyTorch實(shí)現(xiàn)圖像識(shí)別的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PyTorch具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-04-04
  • python中pandas庫(kù)的iloc函數(shù)用法解析

    python中pandas庫(kù)的iloc函數(shù)用法解析

    在 Pandas 中,.iloc 是一種用于基于整數(shù)位置進(jìn)行索引的屬性,可以用于獲取 DataFrame 或 Series 中的數(shù)據(jù),這篇文章主要介紹了python中pandas庫(kù)的iloc函數(shù)用法,需要的朋友可以參考下
    2023-05-05
  • 什么是python的id函數(shù)

    什么是python的id函數(shù)

    在本篇文章里小編給大家分享了關(guān)于python里id函數(shù)的基礎(chǔ)知識(shí)點(diǎn),需要的朋友們可以一起學(xué)習(xí)下。
    2020-06-06
  • python基礎(chǔ)之//、/與%的區(qū)別詳解

    python基礎(chǔ)之//、/與%的區(qū)別詳解

    在學(xué)習(xí)Python或者使用Python進(jìn)行工作的時(shí)候,大家應(yīng)該都看到過(guò)“/”和“//”,下面這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)之//、/與%區(qū)別的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • python?OpenCV實(shí)現(xiàn)圖像特征匹配示例詳解

    python?OpenCV實(shí)現(xiàn)圖像特征匹配示例詳解

    這篇文章主要為大家介紹了python?OpenCV實(shí)現(xiàn)圖像特征匹配示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Python通過(guò)pytesseract庫(kù)實(shí)現(xiàn)識(shí)別圖片中的文字

    Python通過(guò)pytesseract庫(kù)實(shí)現(xiàn)識(shí)別圖片中的文字

    Pytesseract是一個(gè)Python的OCR庫(kù),它可以識(shí)別圖片中的文本并將其轉(zhuǎn)換成文本形式。本文就來(lái)用pytesseract庫(kù)實(shí)現(xiàn)識(shí)別圖片中的文字,感興趣的可以了解一下
    2023-05-05
  • python字典DICT類型合并詳解

    python字典DICT類型合并詳解

    這篇文章主要為大家詳細(xì)介紹了python字典DICT類型合并,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評(píng)論