Python学习笔记第十天
IO多路复用###
监听多个文件描述符
Linux####
select
#f = file(),obj = soket(),sys.stdin = 终端输入
#监听用户输入
#如果用户输入内容,select感知sys.stdin改变
#将改变的文件句柄保存到列表,并将列表作为select第一个参数返回
#如果用户未输入内容,
#select第一个参数 = []
#[sys.stdin,]代表是个元组或列表
import select
import threading
import sys
while True:
readable, writeable, error = select.select([sys.stdin,],[],[],1)
if sys.stdin in readable:
print 'select get stdin',sys.stdin.readline()
IO操作###
文件 网络 tty
如要io 1连接 2操作
连接之后获取一个文件句柄
file,socket,sys.stdin
select监听文件句柄序列,当文件句柄序列变化后,select调用系统接口,得到变化的句柄列表
import socket
import select
ip_port = ('127.0.0.1',8888)
sk = socket.socket()
sk.bind(ip_port)
sk.listen(5)
#
sk.setblocking(False)
sk1 = socket.socket()
sk1.bind(('127.0.0.1',9999))
sk1.listen(5)
sk1.setblocking(False)
while True:
#sk服务器cocket对象
rList,w,e = select.select([sk,sk1], [], [], 2)
for r in rList:
#conn客户端句柄 addr地址
conn,address = r.accept()
print address
读写一体都在rList
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#author = 'han'
import socket
import select
import time
ip_port = ('127.0.0.1',8888)
sk = socket.socket()
sk.bind(ip_port)
sk.listen(5)
sk.setblocking(False)
inputs = [sk]
while True:
rList,w,e = select.select(inputs, [], [], 0.05)
time.sleep(2)
print 'inputs:',inputs
print 'resut:',rList
for r in rList:
if r == sk:
conn,address = r.accept()
inputs.append(conn)
print address
else:
client_data = r.recv(1024)
if client_data:
r.sendall(client_data)
else:
inputs.remove(r)
读写分开
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#author = 'han'
import socket
import select
import time
ip_port = ('127.0.0.1',8888)
sk = socket.socket()
sk.bind(ip_port)
sk.listen(5)
sk.setblocking(False)
inputs = [sk]
outputs = []
while True:
rList,wList,e = select.select(inputs, outputs, [], 0.05)
time.sleep(2)
#print 'inputs:',inputs
#print 'resut:',rList
for r in rList:
if r == sk:
conn,address = r.accept()
inputs.append(conn)
else:
client_data = r.recv(1024)
if client_data:
outputs.append(r)
print outputs
for w in wList:
w.sendall('123')
outputs.remove(r)
队列
计算密集用多进程 IO密集用多线程
Twisted###
作业 线程池
greenlet

浙公网安备 33010602011771号