Python3之多进程join、daemon

join

当子线程调用join时,主线程会被阻塞,当子线程结束后,主线程才能继续执行。

当队列Queue调用join时,被Queue作用的函数会 挂起,等Queue中的数据被全部取出时,被挂起的函数才能继续执行。

daemon

守护进程:当子进程被设置为守护进程时,主进程结束,不管子进程是否执行完毕,都会随着主进程的结束而结束。

代码演示

import os
import time
from multiprocessing import Process, JoinableQueue


def producer0(q):
    for i in range(5):
        print('%s 生产了 %s' % (os.getpid(), i))
        q.put(i)
    q.join()


def producer1(q):
    for i in range(5):
        print('%s 生产了 %s' % (os.getpid(), i))
        q.put(i)
    q.join()


def producer2(q):
    for i in range(5):
        print('%s 生产了 %s' % (os.getpid(), i))
        q.put(i)
    q.join()


def consumer(q):
    while 1:
        res = q.get()
        time.sleep(3)
        print('%s 消费了 %s' % (os.getpid(), res))
        q.task_done()


if __name__ == '__main__':

    q = JoinableQueue()

    p1 = Process(target=producer0, args=(q,))
    p2 = Process(target=producer1, args=(q,))
    p3 = Process(target=producer2, args=(q,))

    p4 = Process(target=consumer, args=(q,))
    p5 = Process(target=consumer, args=(q,))

    p_l = [p1, p2, p3, p4, p5]
    # p4.daemon = True
    # p5.daemon = True
    '''
    理解下面的循环,循环开启列表的子进程,当调用p.join()时,
    主程序被挂起,循环被暂停,等待子程序执行结束后循环才能继
    续执行,这个相当于串行'''
    for p in p_l:
        p.start()
        p.join()

    # for p in p_l:
    #     p.join()
    # p1.join()
    # p2.join()
    # p3.join()

    print('主进程')
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值