ホームページ >バックエンド開発 >Python チュートリアル >Python の非同期ネットワーク探索
非同期ネットワークはネットワークサーバーの接続速度を大幅に向上させると言われているので、非同期ネットワークを学び理解するためのトピックを書く予定です。Pythonには非常に有名な非同期Lib:Twistedがあるので、Pythonを使用してそれを完成させます。
OK、最初に Python ソケットのサーバー セグメントを書き込み、3 つのポート 10000、10001、10002 を開きます。krondo の例では、各サーバーはポートにバインドされており、テスト時には 3 つのシェルを開いて個別に実行する必要があります。面倒な場合は、これらのサービスを 3 つのスレッドで実行してください。
import optparse import os import socket import time from threading import Thread import StringIO txt = '''1111 2222 3333 4444 ''' def server(listen_socket): while True: buf = StringIO.StringIO(txt) sock, addr = listen_socket.accept() print 'Somebody at %s wants poetry!' % (addr,) while True: try: line = buf.readline().strip() if not line: sock.close() break sock.sendall(line) # this is a blocking call print 'send bytes to client:%s' % line #sock.close() except socket.error: sock.close() break time.sleep(1) #server和client连接后,server会故意每发送一个单词后等待一秒钟后再发送另一个单词 def main(): ports = [10000, 10001, 10002] for port in ports: listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) addres = (str('127.0.0.1'), port) listen_socket.bind(addres) listen_socket.listen(5) print "start listen at:%s" % (port,) worker = Thread(target = server, args = [listen_socket]) worker.setDaemon(True) worker.start() if __name__ == '__main__': main() while True: time.sleep(0.1) #如果不sleep的话,CPU会被Python完全占用了 pass以下は、非同期ネットワークがない場合、3 つのポートでサーバーに接続します。 、コードは次のとおりです:
import socket if __name__ == '__main__': ports = [10000, 10001, 10002] for port in ports: address = (str('127.0.0.1'), port) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(address) poem = '' while True: data = sock.recv(4) if not data: sock.close() break poem += data print poemその結果、読み取りタスクを完了するのにかかる時間はわずか 4 秒です。効率は先ほどの同期ソケットの 3 倍です。クライアントの非同期変換には主に 2 つのポイントがあります:
同期モードでは、クライアントはソケットを個別に作成しますが、非同期モードでは、クライアントは最初からすべてのソケットを作成します。