前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python多线程编程中使用Barrier对象进行同步

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

作者头像
Python小屋屋主
发布2018-04-16 14:51:08
1.6K0
发布2018-04-16 14:51:08
举报
文章被收录于专栏:Python小屋Python小屋Python小屋

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()

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档