python類庫32[多進程之Pool+Logging]

來源:互聯網
上載者:User

一 pool

multiprocessing.pool也就是傳說中的進程池,pool的構造如下 

multiprocessing.Pool([processes[, initializer[, initargs[, maxtasksperchild]]]]) 中,

processes表示pool中進程的數目,預設地為當前CPU的核心數。

initializer表示新進程的初始化函數。

initargs表示新進程的初始化函數的參數。

 

maxtasksperchild表示每個進程執行task的最大數目。

 

apply()用來為pool中的進程賦予task。

map()用來迴圈地為pool中的進程賦予tasks。

close()用來阻止新的task的提交到pool中,一但已有的tasks都完成後,pool將退出。

terminate()用來立即停止pool中所有的進程。

join()等待pool中所有的進程退出。

 

執行個體:

 

import multiprocessing
import time

def do_calculation(data):
    print(multiprocessing.current_process().name)
    time.sleep(3)
    return data * 2

def start_process():
    print ('Starting', multiprocessing.current_process().name)

if __name__ == '__main__':
    inputs = list(range(10))
    print ('Input   :' + str(inputs)) 
    
    pool_size = multiprocessing.cpu_count()
    pool = multiprocessing.Pool(processes=pool_size,
                                initializer=start_process,
                                )
    pool_outputs = pool.map(do_calculation, inputs)
    pool.close() # no more tasks
    pool.join()  # wrap up current tasks

    print ('Pool    :' + str(pool_outputs))
    

 

 

運行結果:

 

上面的執行個體中可以看到當前的CPU是8core的,pool中公有8個進程,但是有10個任務,其中有2個進程處理了2個任務。

 

二 logging

使用multiprocessing啟動的logger來協助調試多進程。例如:

logger = multiprocessing.log_to_stderr(logging.DEBUG)

logger.debug("Test") 

 

完!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.