首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止UDP SocketServer

停止UDP SocketServer
EN

Stack Overflow用户
提问于 2012-02-03 22:05:29
回答 2查看 1.1K关注 0票数 2

我正在创建一个UDP SocketServer,如果我收到来自客户端的关闭消息,我希望关闭,而不是关闭UDP连接。

当我收到消息时,将显示Begin,但不显示Finished。如何从这个线程中退出?

代码语言:javascript
复制
class MyUDPHandler( SocketServer.BaseRequestHandler ):       
    def handle( self ):
        data = self.request[0].strip()        
        dic = self.string_XML_to_dic( data )
        if( dic['Cmd'] == str(UDPConst().SHUT_DOWN )): 
            print('Begin')           
            self.server.shutdown()
            print("Finished")

if __name__ == "__main__": 
    HOST, PORT = "", prop['udpport']
    server = SocketServer.UDPServer( ( HOST, PORT ), MyUDPHandler )    
    server.serve_forever()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-03 22:12:58

由于您没有在服务器自己的线程中运行服务器(您需要为此继承ThreadingMixIn ),因此不能使用shutdown,因为它会导致死锁。从source中的函数文档注释

会一直阻塞,直到循环结束。必须在serve_forever()在另一个线程中运行时调用它,否则它将死锁。

票数 0
EN

Stack Overflow用户

发布于 2021-06-08 16:50:04

代码语言:javascript
复制
# Step 1 - Create a global object
global_object = dict()

# Step 2 - Create a function that will receive kill, Control-C signals
def stop_listener(*args): 
   global_object['listener_server'].shutdown()

# Step 3 - Assign kill, and Control-C signal to function=stop_listener
import signal
signal.signal(signal.SIGINT , stop_listener)
signal.signal(signal.SIGTERM, stop_listener)

# Step 4 - Create UDP Server in usual way, and save a reference in global_object
server = socketserver.UDPServer(...)
global_object['listener_server'] = server
server.serve_forever()

说明:

当按下kill C组合键或将kill发送到pid时,函数将关闭-- = stop_listener获取called.

  • function=stop_listener,,然后在UDPServer引用上调用
  • 。-
  • 这有助于清除侦听器。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9129854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档