1. 程式人生 > >001_python多進程實例

001_python多進程實例

highlight sleep usr 每次 range time pre 舉例 urn

一、工作中需要執行zk數據對比,需要按照機器進行並發,舉例以下的例子

# coding:utf8
# !/usr/bin/python
import time
from multiprocessing import Pool

def test(i):
    ‘‘‘
    執行這個程序的時候ps -ef|grep xxx.py可以看到啟動了11個進程(1個父進程和10個子進程),這裏的sleep(3)秒,會每3秒同時輸出10個數字
    :param i:
    :return:
    ‘‘‘
    print i
    time.sleep(3)

if __name__ == "__main__":
    pool = Pool(processes=10)
    for i in xrange(500):
        ‘‘‘
        For循環中執行步驟:
        (1)循環遍歷,將500個子進程添加到進程池(相對父進程會阻塞)
        (2)每次執行10個子進程,等一個子進程執行完後,立馬啟動新的子進程。(相對父進程不阻塞)

        apply_async為異步進程池寫法。
        異步指的是啟動子進程的過程,與父進程本身的執行(print)是異步的,而For循環中往進程池添加子進程的過程,與父進程本身的執行卻是同步的。
        ‘‘‘
        pool.apply_async(test, args=(i,))  # 維持執行的進程總數為10,當一個進程執行完後啟動一個新進程.
    print "================="
    pool.close()
    pool.join()

輸出=>可以看到會10個一批的輸出

0
1
2
3
4
5
6
7
8
9
=================
10
11
12
13
14
15
16
17
18
19
....................

  

001_python多進程實例