进程锁意义:由于输出的屏幕对于进程来说是共享的,多进程在输出的时候可能造成输出乱序,因此需要进程锁来保证只有一个进程在输出到屏幕。
代码范例1:进程锁举例

from multiprocessing import Process, Lock
def f(l, i):
    l.acquire()
    print('hello world', i)
    l.release()

if __name__ == '__main__':
    lock = Lock()
    for num in range(10):
        Process(target=f, args=(lock, num)).start()

进程池:维护一个进程序列。实质是序列内的进程都已启动,但只有指定数量的进程可以同时被执行。(下例中同时有10个进程被启动,在并行的情况下只有5个进程同时执行)
进程池两种方法:
apply:串行
apply_async:并行
代码范例2:进程池

from multiprocessing import Process,Pool
import time,os
def Foo(i):
    time.sleep(2)
    print("from process: ",os.getpid())
    return i+100
def Bar(arg):
    print("-->exec done: ", arg, os.getpid())
if __name__ == '__main__':
    pool = Pool(5)   # 传入的参数为缺省processes=5
    for i in range(10):
        # pool.apply(func=Foo,args=(i,))   # apply:串行
        pool.apply_async(func=Foo,args=(i,),callback=Bar)   # apply_async:并行,此程序是5个进程一起执行
                                       # callback:回调函数,由父进程执行。用于需要程序回调信息时,如记录日志
    print("end",os.getpid())
    pool.close()
    pool.join()  # 进程池中进程执行完毕后再关闭,如果注释此行则程序直接关闭。
# 注意最后两行的顺序,一定要先关闭进程池再join,不能颠倒
# 程序输出:
end 6240
from process:  5988
-->exec done:  100 6240
from process:  7212
-->exec done:  101 6240
from process:  8016
-->exec done:  102 6240
from process:  6808
... ...
Code Output

 

 posted on 2017-12-13 20:37  super2feng  阅读(463)  评论(0编辑  收藏  举报