select()
最近流行の非同期ですが、pythonではどう書くのかなあと。
ってか普通にselectモジュールあるやん!
twistedの中身もselectやね。
どうもasync系はあんまし使わないっぽいらしい。
でサンプル
import socket import select sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('', 8080)) sock.listen(10) read = [sock] write = [] data = {} adrs = {} try: while 1: i, o, e = select.select(read, write, []) for x in i: if x is sock: newSock, addr = sock.accept() print "connect from " , addr read.append(newSock) adrs[newSock] = addr else: newData = x.recv(8192) if newData: print "%s from %s" % (str(newData), adrs[x]) data[x] = data.get(x, '') + newData if x not in write: write.append(x) else: print "disconnect from ", adrs[x] del adrs[x] write.remove(x) x.close() for x in o: tosend = data.get(x) if tosend: n = x.send(tosend) print "%s to %s" % (str(tosend), adrs[x]) tosend = tosend[n:] if tosend: print "%d bytes remain for %s " % (len(tosend), adrs[x]) data[x] = tosend else: del data[x] write.remove(x) finally: sock.close()
んーまあselect()はどんな言語でも似たような感じになりますよと。
うくく。