您当前的位置:首页 > 计算机 > 编程开发 > Python

Python多线程编程中使用Barrier对象进行同步

时间:09-09来源:作者:点击数:

Barrier常用来实现这样的线程同步,多个线程运行到某个时间点以后每个线程都需要等着其他线程都准备好以后再同时进行下一步工作。类似于赛马时需要先用栅栏拦住,每个试图穿过栅栏的选手都需要明确说明自己准备好了,当所有选手都表示准备好以后,栅栏打开,所有选手同时冲出栅栏。

下面的代码创建了一个允许3个线程互相等待的Barrier对象,每个线程做完一些准备工作后调用Barrier对象的wait()方法等待其他线程,当所有线程都调用了wait()方法之后,会调用指定的action对象,然后同时开始执行wait()之后的代码。

import threading

import random

import time

def worker(arg):

    #假设每个线程需要不同的时间来完成准备工作

    time.sleep(random.randint(1, 20))

    #假设已知任何线程的准备工作最多需要20秒

    #每个线程调用wait()时,返回值不一样

    r = b.wait(20)

    if r==0:

        print(arg)

def printOk():

    print('ok')

#允许3个线程等待

#如果线程调用wait()时没有指定超时时间,默认为20秒

b = threading.Barrier(parties=3, action=printOk, timeout=20)

#创建并启动3个线程

#线程数量必须与Barrier对象的parties一致

for i in range(3):

    t = threading.Thread(target=worker, args=(i,))

    t.start()

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门