asyncio结合线程池
2024-09-25 18:01:22
#使用多线程:在协程中集成阻塞io
import asyncio
from concurrent.futures import ThreadPoolExecutor
import socket
from urllib.parse import urlparse def get_url(url):
#通过socket请求html
url = urlparse(url)
host = url.netloc
path = url.path
if path == "":
path = "/" #建立socket连接
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# client.setblocking(False)
client.connect((host, 80)) #阻塞不会消耗cpu #不停的询问连接是否建立好, 需要while循环不停的去检查状态
#做计算任务或者再次发起其他的连接请求 client.send("GET {} HTTP/1.1\r\nHost:{}\r\nConnection:close\r\n\r\n".format(path, host).encode("utf8")) data = b""
while True:
d = client.recv(1024)
if d:
data += d
else:
break data = data.decode("utf8")
html_data = data.split("\r\n\r\n")[1]
print(html_data)
client.close() if __name__ == "__main__":
import time
start_time = time.time()
loop = asyncio.get_event_loop()
executor = ThreadPoolExecutor(3)
tasks = []
for url in range(20):
url = "http://shop.projectsedu.com/goods/{}/".format(url)
task = loop.run_in_executor(executor, get_url, url)
tasks.append(task)
loop.run_until_complete(asyncio.wait(tasks))
print("last time:{}".format(time.time()-start_time))
最新文章
- Oracle存储过程由例子到理论
- Tomcat报java.lang.OutOfMemoryError: Java heap space错误停止运行如何解决
- 自学 PHP,如何不走弯路?
- Python-装饰器详解
- Java for LeetCode 145 Binary Tree Postorder Traversal
- windows电脑变成wifi热点命令
- BZOJ3028 食物 (生成函数)
- cmd启动tomcat
- [转]在 Mac OS X 终端里使用 Solarized 配色方案
- 编程好帮手----CodeSmith Generator Studio
- 高效 Java Web 开发框架 JessMA v3.2.3 beta-1 发布
- CodeForces 213B Numbers
- hdu 5524 二叉树找规律,二进制相关
- 用Eclipse生成JPA元模型
- linux 文件名称前后缀操作函数----取目录函数dir、取文件名称函数notdir、取后缀函数suffix、取前缀basename、加后缀函数addsuffix、加前缀addprefix、连接函数join
- Day9 基于TCP的套接字和基于UDP的套接字
- 基于Keil软件的MCU环境搭建
- HTTP协议(二)之确保web安全的HTTPS
- 学习笔记TF015:加载图像、图像格式、图像操作、颜色
- dotnet core 编程规范
热门文章
- 自测之Lesson5:标准I/O
- Java 集合框架之 Map
- python学习笔记04:安装pip
- TCP系列37—Keep Alive—1、TCP存活检测
- 《Debian标准教程》摘录2则
- .net Mvc4 View—布局页与分部页
- 【alpha】Scrum站立会议第2次....10.17
- CSS设计指南之一 HTML标记与文档结构
- Error:Unable to tunnel through proxy. Proxy returns ";HTTP/1.1 400 Bad Request";
- ASP.NET MVC下使用文件上传和IIS7下的默认设置限制了上传大小的方法