barrier(parties, action=none, timeout=none)

每个线程通过调用wait()尝试通过障碍,并阻塞,直到阻塞的数量达到parties时,阻塞的线程被同时全部释放。

action是一个可调用对象,当线程被释放时,其中一个线程会首先调用action,之后再跑自己的代码。

timeout时默认的超时时间。

方法:

wait(timeout=none)

尝试通过障碍并阻塞。

返回值是一个在0到parties-1范围内的整数,每个线程都不同。

其中一个线程在释放之前将调用action。如果此调用引发错误,则障碍将进入断开状态。

如果等待超时,障碍也将进入断开状态。

如果在线程等待期间障碍断开或重置,此方法可能会引发brokenbarriererror错误。

reset()

重置障碍,返回默认的空状态,即当前阻塞的线程重新来过。见例二

abort()

将障碍置为断开状态,这将导致已调用wait()或之后调用wait()引发brokenbarriererror。见例三

属性:

partier

通过障碍所需的线程数。

n_waiting

当前在屏障中等待的线程数

broken

如果屏障处于断开状态,则返回true。

实例

例一:

# -*- coding:utf-8 -*-

import threading

import time

def open():

print('人数够了, 开门!')

barrier = threading.barrier(3, open)

class customer(threading.thread):

def __init__(self, *args, **kwargs):

super().__init__(*args, **kwargs)

self.n = 3

def run(self):

while self.n > 0:

self.n -= 1

print('{0}在等着开门.'.format(self.name))

try:

barrier.wait(2)

except threading.brokenbarriererror:

pass

print('开门了, go go go')

if __name__ == '__main__':

t1 = customer(name='a')

t2 = customer(name='b')

t3 = customer(name='c')

t1.start()

t2.start()

t3.start()

运行结果:

a在等着开门.

b在等着开门.

c在等着开门.

人数够了, 开门!

开门了, go go go

开门了, go go go

开门了, go go go

c在等着开门.

a在等着开门.

b在等着开门.

人数够了, 开门!

开门了, go go go

开门了, go go go

开门了, go go go

...

例二:

# -*- coding:utf-8 -*-

import threading

import time

def open():

print('人数够了, 开门!')

barrier = threading.barrier(3, open)

class customer(threading.thread):

def __init__(self, *args, **kwargs):

super().__init__(*args, **kwargs)

self.n = 3

def run(self):

while self.n > 0:

self.n -= 1

print('{0}在等着开门.'.format(self.name))

try:

barrier.wait(2)

except threading.brokenbarriererror:

continue

print('开门了, go go go')

class manager(threading.thread):

def run(self):

print('前面几个排队的不算,重新来')

barrier.reset()

if __name__ == '__main__':

t1 = customer(name='a')

t2 = customer(name='b')

t3 = customer(name='c')

tm = manager()

t1.start()

t2.start()

tm.start()

t3.start()

运行结果:

a在等着开门.

b在等着开门.

前面几个排队的不算,重新来

a在等着开门.

b在等着开门.

c在等着开门.

人数够了, 开门!

开门了, go go go

开门了, go go go

开门了, go go go

a在等着开门.

c在等着开门.

b在等着开门.

人数够了, 开门!

开门了, go go go

开门了, go go go

开门了, go go go

c在等着开门.

例三:

# -*- coding:utf-8 -*-

import threading

def open():

print('人数够了, 开门!')

barrier = threading.barrier(3, open)

class customer(threading.thread):

def __init__(self, *args, **kwargs):

super().__init__(*args, **kwargs)

self.n = 3

def run(self):

while self.n > 0:

self.n -= 1

print('{0}在等着开门.'.format(self.name))

try:

barrier.wait(2)

except threading.brokenbarriererror:

print('今天好像不开门了,回家.')

break

print('开门了, go go go')

class manager(threading.thread):

def run(self):

print('老板跟小姨子跑了,不开门了!')

barrier.reset()

if __name__ == '__main__':

t1 = customer(name='a')

t2 = customer(name='b')

t3 = customer(name='c')

tm = manager()

t1.start()

t2.start()

tm.start()

t3.start()

运行结果:

a在等着开门.

b在等着开门.

老板跟小姨子跑了,不开门了!

今天好像不开门了,回家.

今天好像不开门了,回家.

c在等着开门.

今天好像不开门了,回家.

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

python barrier_Python多线程-Barrier(障碍对象)相关推荐

  1. python barrier_Python多线程Barrier(障碍对象) 雷子

    Barrier(parties, action=None, timeout=None) 每个线程通过调用wait()尝试通过障碍,并阻塞,直到阻塞的数量达到parties时,阻塞的线程被同时全部释放. ...

  2. python barrier_Python线程障碍对象Barrier原理详解

    python线程Barrier俗称障碍对象,也称栅栏,也叫屏障. 一.线程障碍对象Barrier简介 # 导入线程模块 import threading # 障碍对象barrier barrier = ...

  3. Python 线程障碍对象 Barrier - Python零基础入门教程

    目录 一.Python 线程障碍对象 Barrier 简介 二.Python 线程障碍对象 Barrier 原理 三.Python 线程障碍对象 Barrier 函数介绍 四.Python 线程障碍对 ...

  4. python barrier_34.python 线程障碍对象Barrier

    python线程Barrier俗称障碍对象,也称栅栏,也叫屏障. 一.线程障碍对象Barrier简介 1 2 3 4 5# 导入线程模块 importthreading # 障碍对象barrier b ...

  5. python barrier_Python中的Barrier对象

    python中的Barrier对象用于等待固定数量的线程完成执行,然后任何特定线程才能继续执行程序.每个线程在到达Barrier时都调用wait()函数.Barrier负责跟踪wait()调用的数量. ...

  6. Python使用多线程搜索指定范围内的所有素数

    问题描述: 使用多线程技术搜索并输出指定范围内的所有素数. 思考一下: 1)如何创建和启动线程? 2)如何让多个线程协同工作? 尝试着想一想,试一试,然后到文末阅读参考代码. ----------相关 ...

  7. python多核多线程编程实例_Python多线程

    多线程基础概念 并行与并发并行:同时处理多个任务,必须在多核环境下 一段时间内同时处理多个任务,单核也可以并发 并发手段线程:内核空间的调度 进程:内核空间的调度 协程:用户空间的调度 线程可以允许程 ...

  8. Python 伪多线程

    Python的"伪多线程"--- GIL Python 伪多线程 GIL Python 伪多线程 Python热度很高,能干的事也很多.虽然CPython底层实现用的C,但它的速度 ...

  9. python学习——多线程

    python学习--多线程 概念 python中线程的开发 线程的启动 线程的退出和传参 threading的属性和方法 threading实例的属性和方法 多线程 daemon线程和non-demo ...

最新文章

  1. JavaScript---事件详解
  2. 再见了,余!额!宝!!!
  3. 注意力公式步骤每一步的含义,总共三步
  4. VL53L0x TOF激光测距的 stm32 HAL库驱动代码
  5. 华盛顿大学成立SAML实验室:陈天奇参与,推进未来AI系统全栈研究
  6. 赫夫曼树的定义及原理
  7. 【案例】自由运动小球
  8. php跳转qq临时会话,QQ客服支持临时会话设置
  9. ctworklist php开发,DICOM worklist工作原理
  10. 微信公众平台版面设计需要服务器,谈谈微信公众号如何快速在线排版设计好看又实用的方法...
  11. Java小例子—薪水计算器(含具体的代码思路)
  12. 微软造的还原精灵EWF(Enhanced Write Filter)
  13. html显示和隐藏文字特效,14款震撼人心的HTML5文字特效
  14. 计算机考研专业课考c语言的大学,【择校必看】十三所计算机专业课只考数据结构的985院校!...
  15. 使用JSON-Schema验证数据,第1部分
  16. 阿里云认证证书合集(一起来考证)
  17. 百度android 升级,百度浏览器去广告版下载-百度浏览器v6.4.21安卓去广告去升级版-ucbug软件站...
  18. ora-01407 无法更新 值 为null
  19. iOS runtime面试题
  20. Ubuntu平台 常用插件下载(部分含源码)

热门文章

  1. iPhone SE 3售价曝光:搭载A15芯片 价格依旧香
  2. 欧盟回应Meta退出欧洲威胁:没有Facebook生活一样很美好
  3. 苹果要换Type-C接口?丁磊建议统一充电器接口 工信部回复来了...
  4. 彻底凉凉!两头部网红女主播账号被封,逃税被罚近亿元 还被曝不给员工交社保...
  5. 中国移动将于11月4日首发上会 拟募资560亿元
  6. 抖音发布女性数据报告:平均每天31.8万女性发布自拍视频又删除
  7. 《原神》月入16亿,米哈游为何仍然被嫌弃?
  8. “浪姐”万茜盗号事件是锅传锅?阿里、网易都来回应了
  9. 拉勾发布互联网社畜输入法报告:市场人每日打字7300个
  10. 二月1500-1999元性价比排行榜:前三都是魅族手机