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

并发篇-python协程

作者头像
小团子
发布2019-07-18 11:00:21
5690
发布2019-07-18 11:00:21
举报
文章被收录于专栏:数据云团数据云团

>>>使用进程池来实现并发服务器

# 通常可以分配2倍的 CUP 个数

>>>pool = ThreadPool(cpu_count()*2)

# 获取当前计算机的 CPU 核心个数

>>>n = cpu_count()

# 充分利用 CPU ,为每个 CPU 分配一个进程

>>>for i in range(n):

协程

线程是系统级别的,它们是由操作系统调度;

协程是程序级别的,由程序员根据需要自己调度。

我们把一个线程中的一个个函数叫做子程序,那么子程序在执行过程中可以中断去执行别的子程序;别的子程序也可以中断回来继续执行之前的子程序,这就是协程。

也就是说同一线程下的一段代码<1>执行着执行着就可以中断,然后跳去执行另一段代码,当再次回来执行代码块<1>的时候,接着从之前中断的地方开始执行。

>>>使用yield实现协程操作

>>>执行结果

如果某一个协程被网络阻塞了,那么整个线程(进程)都被阻塞。

协程本身不能避开阻塞。 任意时刻,只有一个协程在执行。

greenlet实现协程

Python的 greenlet就相当于手动切换,去执行别的子程序,在“别的子程序”中又主动切换回来。

# 切换到消费者,并将 item 传入消费者

>>>consumer.switch(item)

# 将一个普通函数变成协程

>>>consumer = greenlet(consumer)

# 让消费者先进入暂停状态(只有恢复时才能接受数据)

>>>consumer.switch()

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

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

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

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

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