进程锁和进程池(附线程池)

进程锁和线程锁的写法看起来差不多,进程锁是用来防止使用多进程的时候打印出现混乱。

# coding=utf-8
from multiprocessing import Process, Lock

def f(l, i):
    l.acquire()
    print u'进程', i
    l.release()

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

进程池可以控制同一时间有多少个进程可以在cup上运行

# coding=utf-8
from multiprocessing import Pool
import os, time


def f(i):
    print i, os.getpid()
    time.sleep(2)


def c(arg):
    print u'回调'


if __name__ == '__main__':  # 在Windows上运行必须要写这个判断,否则报错,还有其它解决方法,可参考报错提示
    pool = Pool(processes=3)  # 进程池允许同时放10个进程

    for i in range(10):
        p = pool.apply_async(func=f, args=(i,), callback=c)  # apply_async并行,apply串行, callback是进程运行结束的回调(在父进程上运行)

    pool.close()
    pool.join()  # 等所有的进程运行结束(一定要在colse之后join)

执行结果:

0 7700
1 7780
2 4636
3 7700
回调
回调
4 7780
5 4636
回调
6 7700
回调
回调7
 7780
8回调
4636
9 7700
回调
回调
回调
回调

 

multiprocessing.dummy模块下的Pool可以实现线程池,写法类似进程池

原文地址:https://www.cnblogs.com/allenzhang-920/p/10416007.html