使用 ayncio 实现 CountDownLatch
class CountDownLatch(object):
def __init__(self, count=1):
self.count = count
self.lock = asyncio.Lock()
self.event = asyncio.Event() async def count_down(self):
with await self.lock:
self.count -= 1
if self.count <= 0:
self.event.set() async def wait(self):
await self.event.wait()
网上没找到好用的,自己实现了一个。
测试:
async def test(latch : CountDownLatch, i):
# await asyncio.sleep(random.random() * 2)
print('{} work complete'.format(i))
await latch.count_down() async def main():
try:
for j in range(0, 10):
print('turn start')
latch = CountDownLatch(20)
for i in range(0, 20):
asyncio.ensure_future(test(latch, i))
await latch.wait()
print("20 tasks complete")
await asyncio.sleep(2)
except Exception as e:
print(e) if __name__ == '__main__' :
loop = asyncio.get_event_loop();
loop.run_until_complete(asyncio.wait([main()]))
使用 ayncio 实现 CountDownLatch的更多相关文章
- 多线程条件通行工具——CountDownLatch
CountDownLatch的作用是,线程进入等待后,需要计数器达到0才能通行. CountDownLatch(int)构造方法,指定初始计数. await()等待计数减至0. await(long, ...
- 【Java并发编程实战】-----“J.U.C”:CountDownlatch
上篇博文([Java并发编程实战]-----"J.U.C":CyclicBarrier)LZ介绍了CyclicBarrier.CyclicBarrier所描述的是"允许一 ...
- 同步辅助类CountDownLatch用法
CountDownLatch是一个同步辅助类,犹如倒计时计数器,创建对象时通过构造方法设置初始值,调用CountDownLatch对象的await()方法则使当前线程处于等待状态,调用countDow ...
- 架构师养成记--12.Concurrent工具类CyclicBarrier和CountDownLatch
java.util.concurrent.CyclicBarrier 一组线程共同等待,直到达到一个公共屏障点. 举个栗子,百米赛跑中,所有运动员都要等其他运动员都准备好后才能一起跑(假如没有发令员) ...
- Java并发之CountDownLatch
CountDownLatch是Java concurrent包下的一个同步工具.它可以让一个(或多个)线程等待,直到其他线程中的某些操作完成. 本质上是一个信号量,我们把它比作一个有N个插销的大门,它 ...
- Java多线程之CountDownLatch学习
给出官网上的例子:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html Java中conc ...
- 【Java】JDK类 CountDownLatch
一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 用给定的计数 初始化 CountDownLatch.由于调用了 countDown() 方法,所以在当前计数到达 ...
- 【JUC】JDK1.8源码分析之CountDownLatch(五)
一.前言 分析完了CyclicBarrier后,下面分析CountDownLatch,CountDownLatch用于同步一个或多个任务,强制他们等待由其他任务执行的一组操作完成.CountDownL ...
- java多线程等待协调工作:CountDownLatch类的高级应用
一:说明 基本上对于线程初步了解的人,都是使用synchronized来同步线程的,也确实,它也是可以满足一些常用的问题.那么我们来说一些它不能解决的问题(其实是不怎么好解决的问题,并不是真的不能解决 ...
- 【JAVA并发编程实战】4、CountDownLatch
这是一个计数锁,说白了,就是当你上锁的时候,只有计数减少到0的时候,才会释放锁 package cn.xf.cp.ch05; public class TaskRunable implements R ...
随机推荐
- threejs - 渲染第一个3D场景 - 旋转的正方体
1. 安装 threejs & 使用 2. 创建三要素 场景 scene 相机 camera 渲染器 render 3. 场景 new THREE.Scene() 相机分为 2 种 1. ...
- MidJourney新手攻略
目录 MidJourney简介 MidJourney的使用 1. 加入Discord 2. 选择一个频道 3. 使用/imagine来输入提示 4. 等待一分钟左右,会输出四张图 5. 查看结果 Re ...
- HDU-ACM 2024 Day1
T1009 数位的关系(HDU 7441) 考虑 \(l = r\) 的情况,此时只要计算一个数字,我们将其展开为一个字符串 \(S\).设 \(f_{i, j, k}\) 表示考虑了 \(S\) 的 ...
- WPF中为Popup和ToolTip使用WindowMaterial特效 win10/win11
先看效果图: 大致思路是:通过反射获取Popup内部的原生窗口句柄,然后通过前文已经实现的WindowMaterial类来应用窗口特效:对于ToolTip,为了保持其易用性,我使用了附加属性+全局样式 ...
- 《使用Gin框架构建分布式应用》阅读笔记:p52-p76
<用Gin框架构建分布式应用>学习第4天,p32-p76总结,总计25页. 一.技术总结 1.Go知识点 (1)iouti 书上使用ioutil包读取JSON文件,但是从go 1.16 开 ...
- 云原生周刊:Istio 1.20.0 发布 | 2023.11.20
开源项目推荐 DevPod DevPod 是一款纯客户端工具,可在任何后端基于 devcontainer.json 创建可重现的开发人员环境.每个开发者环境都在一个容器中运行,并通过 devconta ...
- NeuVector 会是下一个爆款云原生安全神器吗?
近日一则<SUSE 发布 NeuVector:业内首个开源容器安全平台>的文章被转载于各大 IT 新闻网站.作为 SUSE 家族的新进成员,在 3 个月后便履行了开源承诺,着实让人赞叹.那 ...
- 云原生爱好者周刊:你对 K8s 集群升级有信心吗?
开源项目推荐 GoNoGo 在 Kubernetes 集群中,有多种因素会影响到附加组件的升级成功率,比如某些组件只支持特定的 API 或者特定的 Kubernetes 版本,某些组件废弃了特定的 a ...
- MIT 6.002 Circuits and Electronics by Prof. Anant Agarwal
官网:MIT 2007 Circuits and Electronics 参考资料,课程讲义,课程PPT. 国内的电路像石群老师,罗先觉老师,讲的很细致,也许跟教材有关系,像电阻串并联的等效电阻就用了 ...
- nginx从入门到实战
概述 异步非阻塞的高性能HTTP和反向代理服务器 nginx的运行架构 1.Master进程 启动检查nginx.conf是否正确 根据配置文件创建.监控worker进程的数量和状态 监听socket ...