IO多路复用与异步非阻塞
2024-08-31 22:17:03
1.基于socket,发送http请求
import socket
import requests
# 方式一
list=['li','gh ','nn']
for i in list:
ret=requests.get('https://www.baidu.com/s?wd=%s' % i)
# 方式二
def func(key):
client=socket.socket()
client.connect(('www.baidu.com',80))
client.sendall(b'GET /s?wd=alex HTTP/1.0\r\nhost:www.baidu.com\r\n\r\n') #http协议
chunk_list=[]
while True:
chuck=client.recv(8096)
if not chuck:
break
chunk_list.append(chuck)
body=b''.join(chunk_list)
print(body.decode('utf-8'))
list=['li','gh ','nn']
for key in list:
func(key)
单线程的并发:IO多路复用,非阻塞
import socket
import requests
# 方式一
list=['li','gh ','nn']
for i in list:
ret=requests.get('https://www.baidu.com/s?wd=%s' % i)
# 方式二
def func(key):
client=socket.socket()
client.connect(('www.baidu.com',80))
client.sendall(b'GET /s?wd=alex HTTP/1.0\r\nhost:www.baidu.com\r\n\r\n') #http协议
chunk_list=[]
while True:
chuck=client.recv(8096)
if not chuck:
break
chunk_list.append(chuck)
body=b''.join(chunk_list)
print(body.decode('utf-8'))
list=['li','gh ','nn']
for key in list:
func(key)
Twised基于事件循环实现的异步非阻塞
socket_list=[Foo(client1),Foo(client2),Foo(client3)]
conn_list=[client1,client2,client3]
err_list=[] while True:
# 方式一: #没有执行自己的fileno方法
# rlist,wlist,elist=select.select(socket_list,conn_list,[],0.005)#这里面的socket_list/conn_list内部会调用每一个值的fileno方法,获得返回值
# 方式二: # select就是利用该返回值去判检测的
# rlist, wlist, elist = select.select([Foo(client1),Foo(client2),Foo(client3)], [client1,client2,client3], [], 0.005)
if wlist: #执行类中的fileno方法
最新文章
- [No0000AD]7z源码完全移植至Visual Studio 2015
- Oracle常用SQL查询
- C和指针 第五章 警告总结
- tableview在第一次显示时会自动relodata
- angularjs探秘<;一>;
- Javascript模块化编程(一):模块的写法 (转载 学习中。。。。)
- RFC 2616
- PHP用户登录与注册页面
- Linux菜鸟之路[4]-cal,date,bc,echo $LANG,man
- C# - 数据库存取图片
- 第38章 刷新令牌 - Identity Server 4 中文文档(v1.0.0)
- centos7将网卡名字改成eth样式
- 星云STS 常用配置
- mongodb new file allocation failure
- java 代码块,静态代码块,构造器等的执行顺序
- 用highcharts展现你的数据
- Spring 3.1新特性之一:spring注解之@profile
- [洛谷P1074] 靶形数独
- php的yii框架开发总结9
- Win7 设置、访问共享文件夹