Python学習ノート(六)マルチプロセスによる同時サーバの実現

2873 ワード

これはマルチプロセスよりも簡単で、acceptごとに新しい接続が作成されます.コードは次のとおりです.
# coding: utf-8
import socket
import sys
import errno
import threading
from time import ctime

class ClientThread(threading.Thread):
    def __init__(self, client_socket, client_address):
        threading.Thread.__init__(self)
        self.client_socket = client_socket
        self.client_address = client_address

    def run(self):
        self.handle_connection()

    def handle_connection(self):
        while True:
            data = self.client_socket.recv(1024)
            if not data:
                print 'disconnect', self.client_address
                self.client_socket.close()
                break;
            else:
                self.client_socket.send('[%s] %s' % (ctime(), data)) # 


if __name__ == '__main__':
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    listen_address = ('localhost', 9981)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind(listen_address)
    server_socket.listen(10)

    while True:
        try:
            (client_socket, client_address) = server_socket.accept()
        except IOError, e:            
            if e.errno == errno.EINTR:
                continue # 
            else:
                raise # throw
        print 'Got connection from ', client_address
        t = ClientThread(client_socket, client_address)
        t.start()

ここのthreadはjoinを行うことができません.そうしないと、プライマリスレッドがブロックされ、同時性が失われます.
またpythonのスレッドはdetachを行う必要はありません.