前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >并发篇-python线程池

并发篇-python线程池

作者头像
小团子
发布2019-07-18 10:59:35
5780
发布2019-07-18 10:59:35
举报
文章被收录于专栏:数据云团数据云团

生产者指的是生产数据的任务,消费者指的是处理数据的任务,

在并发编程中,如果生产者的处理速度很快,而消费者的处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。

生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题,生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列中取,阻塞队列就行当于一个缓冲区,平衡了生产者和消费者的处理能力。

阻塞队列就是用来给生产者和消费者解耦。

>>>多进程生产者与消费者模型

# JoinableQueue内部自带计数功能,每执行一次task_done,计数减一。

>>> q.task_done()

可重复利用的线程

# 触发等待机制

>>> self.daemon = True

# 实例化的时候就直接启动线程

>>> self.start()

# 无限循环,不停执行任务

>>> while True:

# 获取任务与参数

>>> func, args, kwargs = self.queue.get()

# 执行任务

>>> func(*args, **kwargs)

# 告诉 queue 这个任务处理完毕

>>> self.queue.task_done()

# 向队列中提交任务

>>> self.queue.put((func, args, kwargs))

# 等待所有提交的任务执行完毕

>>> def join(self):

# 问 queue 任务是否执行完毕

>>> self.queue.join()

>>>执行结果

任务完成后,主线程就开始退出,因此守护线程被杀死。

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

本文分享自 数据云团 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档