Python套接字接受块-防止应用程序退出

2023-11-22

我编写了一个非常简单的 python 类,它等待套接字上的连接。目的是将此类粘贴到现有应用程序中,并将数据异步发送到连接的客户端。

问题是,当等待 socket.accept() 时,我无法通过按 ctrl-c 来结束我的应用程序。我也无法检测到我的课程何时超出范围并通知其结束。

理想情况下,下面的应用程序应在 time.sleep(4) 到期后退出。正如您在下面看到的,我尝试使用 select,但这也阻止了应用程序响应 ctrl-c。如果我可以检测到变量“a”超出了 main 方法中的范围,我可以设置退出标志(并减少 select 的超时以使其响应)。

有任何想法吗?

thanks


import sys
import socket
import threading
import time
import select

class Server( threading.Thread ):
    def __init__( self, i_port ):
        threading.Thread.__init__( self )
        self.quitting = False
        self.serversocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
        self.serversocket.bind( (socket.gethostname(), i_port ) )
        self.serversocket.listen(5)
        self.start()

    def run( self ):
        # Wait for connection
        while not self.quitting:
            rr,rw,err = select.select( [self.serversocket],[],[], 20 )
            if rr:
                (clientsocket, address) = self.serversocket.accept()
                clientsocket.close()

def main():
    a = Server( 6543 )
    time.sleep(4)

if __name__=='__main__':
  main()


Add self.setDaemon(True) to the __init__ before self.start().

(在 Python 2.6 及更高版本中,self.daemon = True是首选)。

关键思想已解释here:

整个Python程序退出时 没有剩余任何活动的非守护线程。

因此,您需要为那些线程创建“守护进程”,这些线程不应仅通过自身的活动来保持整个进程的活动。顺便说一下,主线程始终是非守护进程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python套接字接受块-防止应用程序退出 的相关文章

随机推荐