zoukankan      html  css  js  c++  java
  • Python学习笔记(六)多进程实现并发服务器

    这个相对于多进程更加简单,每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

  • 相关阅读:
    window.open() 使用详解
    20151117
    20151116
    打开一个网页并弹窗提示,点击确定后2秒后关闭
    网页制作中的一点问题及解决方案
    Android WebView 开发详解(二)
    Android WebView 开发详解(一)
    Android:控件WebView显示网页
    Dagger 2: Step To Step
    Introducing RecyclerView(二)
  • 原文地址:https://www.cnblogs.com/inevermore/p/4096151.html
Copyright © 2011-2022 走看看