进程锁 & 进程池的使用

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

 

转载于:https://www.cnblogs.com/fone933/p/8034785.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值