Python学习---Python的异步---asyncio模块(no-http)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python学习---Python的异步---asyncio模块(no-http),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1807字,纯文字阅读大概需要3分钟。
内容图文
![Python学习---Python的异步---asyncio模块(no-http)](/upload/InfoBanner/zyjiaocheng/1302/c1dab51d35dd495fb101e907fb9ffb58.jpg)
Asyncio进行异步IO请求操作:
1. @asyncio.coroutine 装饰任务函数
2. 函数内配合yield from 和装饰器@asyncio.coroutine 配合使用【固定格式】
3. loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(*tasks)) # 接受异步IO的任务并异步执行任务
实例一:
异步IO: 协程机制 + 回调函数
import asyncio @asyncio.coroutine # 装饰任务函数 def func1(): print(‘before...func1......‘) # yield from 和装饰器@asyncio.coroutine 配合使用【固定格式】 yield from asyncio.sleep(5) # 必须写asyncio才表示异步IO执行5秒,time.sleep(5)不生效 print(‘5秒后...‘) print(‘end...func1......‘) tasks = [func1(), func1()] # 事件循环: 对涉及异步,协成,阻塞等IO操作时进行事件的循环操作 loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.gather(*tasks)) # 接受异步IO的任务并异步执行任务 loop.close()
AsyncIO缺点:
不支持HTTP请求,也就是说不能直接发送URL过去进行访问
支持TCP请求,也就是说可以发送【IP+端】进行访问
注:HTTP在TCP之上
基于asyncio实现利用TCP模拟HTTP请求
import asyncio # 基于asyncio实现利用TCP模拟HTTP请求[asyncio实际上不支持HTTP请求] @asyncio.coroutine def fetch_async(host, url=‘/‘): print(‘HOST和URL信息:‘, host, url) # reader: 用于读取连接的信息 # writer: 用于给服务器写信息 reader, writer = yield from asyncio.open_connection(host, 80) # 基于TCP模拟的HTTP请求:请求头header和请求体body之间是2空行【\r\n\r\n】分隔的 request_header_content = """GET %s HTTP/1.0\r\nHost: %s\r\n\r\n""" % (url, host,) request_header_content = bytes(request_header_content, encoding=‘utf-8‘) # 字符串转换字节 writer.write(request_header_content) # 准备发送数据给服务器 # drain: 英文翻译为喝光,这里作发送完成理解 yield from writer.drain() # 发送数据给服务器,此时可能会阻塞执行个请求,考虑数据量大等原因 text = yield from reader.read() # 等待返回的数据,text就是先收到回复的请求完成后等待其他返回 print(host,url,‘返回后的结果:‘, text) writer.close() # 关闭流 tasks = [ fetch_async(‘www.cnblogs.com‘, ‘/ftl1012/‘), fetch_async(‘www.dig.chouti.com‘, ‘/images/homepage_download.png‘) ] loop = asyncio.get_event_loop() results = loop.run_until_complete(asyncio.gather(*tasks)) loop.close()
基于TCP模拟HTTP详解:
原文:https://www.cnblogs.com/ftl1012/p/9424748.html
内容总结
以上是互联网集市为您收集整理的Python学习---Python的异步---asyncio模块(no-http)全部内容,希望文章能够帮你解决Python学习---Python的异步---asyncio模块(no-http)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。