【问题标题】:Threaded UDP server bug线程 UDP 服务器错误
【发布时间】:2014-09-04 11:25:32
【问题描述】:

我以某种方式破坏了这段代码,我无法修复它。服务器/客户端代码是由其他人编写的(主要来自 py 手册中的示例),我无法找出问题所在。

我遇到了 super 和 init 以及爵士乐的问题,主要是因为我不完全理解并且发现大多数关于该主题的文档让我比开始时更加困惑。现在,我会很高兴让它工作。这可能是一些愚蠢的问题,在一行中解决了。

有什么想法吗?我尝试不粘贴不相关的代码,但如果有帮助,我可以添加更多或提供整个文件。代码在创建句柄线程时特别崩溃。我的测试用例正在运行代码实例,并在它们之间传递消息,它在收到第一条 UDP 消息时就崩溃了。

# Library imports
import threading
import SocketServer
import multiprocessing

# .. More code here ...

class ThreadedUDPServer(SocketServer.ThreadingMixIn, SocketServer.UDPServer):
    pass


class NodeDaemon(ThreadedUDPServer):
    def __init__(self, host, port, modules):
        ThreadedUDPServer.__init__(self, (host, port), NodeProtocolHandler)

        # Store parameters in the class
        self.modules    = modules
        self.port       = port
        self.ip         = host

        # Check if we have enabled multithreaded listen daemon
        if settings.MULTI:
            self.server_thread = multiprocessing.Process(target=self.serve_forever)
        else:
            self.server_thread = threading.Thread(target=self.serve_forever)

        # Make the server thread daemonic
        self.server_thread.daemon = True

        # Start the server thread
        self.server_thread.start()

        # Update our identity node info
        self.modules.identity = NodeInfo(host, port)

    def fetch_modules(self):
        return self.modules


class NodeProtocolHandler(SocketServer.BaseRequestHandler):
    """
        Handles nody things.
        Check https://docs.python.org/2/library/socketserver.html
        For more sweet deets.
    """
    def __init__(self,*args,**kwargs):
        super(SocketServer.BaseRequestHandler,self).__init__(args,kwargs)

        # Grab modules references
        self.modules = self.server.fetch_modules()


        # ... More code here .. #

    def handle(self):
        """
            Main routine to handle all incoming UDP packets.
        """
        # Grab the raw message data received
        raw_data = self.request[0].strip()

        # ... More code here ...

产生的错误是:

Exception happened during processing of request from ('127.0.0.1', 60377)
----------------------------------------
Traceback (most recent call last):
  File "C:\Python27\lib\SocketServer.py", line 593, in process_request_thread
    self.finish_request(request, client_address)
  File "C:\Python27\lib\SocketServer.py", line 334, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "C:\some_dir\node_daemon.py", line 60, in __init__
    super(SocketServer.BaseRequestHandler,self).__init__(args,kwargs)
TypeError: must be type, not classobj

【问题讨论】:

    标签: python multithreading sockets udp


    【解决方案1】:
    def __init__(self,*args,**kwargs):
    -        super(SocketServer.BaseRequestHandler,self).__init__(args, kwargs)
    +        SocketServer.BaseRequestHandler.__init__(self,*args, **kwargs)
    

    【讨论】:

      猜你喜欢
      • 2014-04-24
      • 2015-04-11
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 2015-01-09
      相关资源
      最近更新 更多