Python手动或自动协程操作方法解析


Posted in Python onJune 22, 2020

1.手动协程操作:

# pip install gevent
from greenlet import greenlet

def test():
  print('He ')
  gr2.switch() # 切换到test2
  print('a ')
  gr2.switch()

def test2():
  print('is ')
  gr1.switch()
  print('student.')

gr1 = greenlet(test)  # 创建一个协程
gr2 = greenlet(test2)
gr1.switch()  # 切换到gr1,也就是运行它

2. 自动协程,遇到I/O自动切换

import gevent
from gevent import monkey; monkey.patch_all()  # 导入monkey,给所有支持的模块打上补丁,变成非阻塞模块,也就是使其能够进行协程操作
def test1(n):
  print("I'm doing my homework.")
  gevent.sleep(n)     # 模拟I/O操作,gevent自动切换
  print('Keep doing my homework.')

def test2(n):
  print("I have no time to watch TV.")
  gevent.sleep(n)
  print('Stop thinking!')

def test3():
  print("Life is hard.")

# 等待 greenlets 全部结束
gevent.joinall([
  gevent.spawn(test1,3), # 创建一个新的greeenlet对象,并规划它去执行 test1(3)
  gevent.spawn(test2,1),
  gevent.spawn(test3),
])

结果:

I'm doing my homework.
I have no time to watch TV.
Life is hard.
Stop thinking!
Keep doing my homework.

3. socket 协程实例:

服务器:

import socket
import gevent
from gevent import monkey
monkey.patch_all()  # 打补丁,让所有支持的模块变成非阻塞的方法

def server(ip,port):
  s = socket.socket()  # 生成socket对象
  s.bind((ip, port))  # 绑定ip和端口
  s.listen()      # 设置监听
  while True:
    cli, addr = s.accept()       # 等待连接
    gevent.spawn(handle_request, cli)  # 对每一个连接,使用协程的方法生成greenlet

def handle_request(conn):
  try:
    while True:
      data = conn.recv(1024)  # 接收数据
      print("recv:", data)
      new = 'Hello '+ data.decode().title()
      conn.send(new.encode('utf8'))      # 返回数据
      if not data:
        conn.shutdown(socket.SHUT_WR)
  except Exception as e:
    print(e)
  finally:
    conn.close()
if __name__ == '__main__':
  server('localhost',9999)

客户端:

import socket
client = socket.socket()
client.connect(('localhost',9999))
while True:
  con = input('>>>:').strip()
  if len(con) ==0: continue
  client.send(con.encode('utf-8'))
  data = client.recv(1024)
  print(data.decode())
client.close()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 数据加密代码
Dec 24 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
使用python实现接口的方法
Jul 07 Python
关于Python中空格字符串处理的技巧总结
Aug 10 Python
浅谈pandas用groupby后对层级索引levels的处理方法
Nov 06 Python
python+Django实现防止SQL注入的办法
Oct 31 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
DjangoWeb使用Datatable进行后端分页的实现
May 18 Python
pygame用blit()实现动画效果的示例代码
May 28 Python
Python字符串及文本模式方法详解
Sep 10 Python
Python中 range | np.arange | np.linspace三者的区别
Mar 22 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 #Python
Python socket服务常用操作代码实例
Jun 22 #Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 #Python
零基础小白多久能学会python
Jun 22 #Python
Keras-多输入多输出实例(多任务)
Jun 22 #Python
python和c语言哪个更适合初学者
Jun 22 #Python
Virtualenv 搭建 Py项目运行环境的教程详解
Jun 22 #Python
You might like
PHP调用Webservice实例代码
2011/07/29 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
表单内同名元素的控制
2006/11/22 Javascript
JavaScript 继承使用分析
2011/05/12 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
JavaScript SHA512&SHA256加密算法详解
2015/08/11 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
JavaScript编写九九乘法表(两种任选)
2017/02/04 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
[02:55]2018DOTA2国际邀请赛勇士令状不朽珍藏Ⅲ饰品一览
2018/08/01 DOTA
Python实现的数据结构与算法之队列详解
2015/04/22 Python
python中的字典操作及字典函数
2018/01/03 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
基于python3 的百度图片下载器的实现代码
2019/11/05 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
python实现滑雪者小游戏
2020/02/22 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
动员大会主持词
2014/03/20 职场文书
教师自我鉴定范文
2014/03/20 职场文书
社区禁毒工作方案
2014/06/02 职场文书
标准版离职证明书
2014/09/12 职场文书
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书