ThreadingTcpServer和Threads:如何从主线程关闭服务器?

2024-10-03 09:19:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我的程序需要一个监听和处理连接的服务器,当threadingcpserver为我完成全部工作时,我决定使用它。在

我注意到ThreadingTcpServer.serve_forever()是一个阻塞方法,所以我将线程服务器设为线程本身。 我的代码是:

server = None #a variable that will contain the server

def createAndStartServer():
  print "starting..."
  server = ThreadingTcpServer((socket.gethostname(),1234),MyRequestHandler)
  server.serve_forever() #blocking method
  print "stopping..."

myThread = threading.Thread(target=createAndStartServer)
myThread.start()
time.sleep(3)
server.shutdown() #this one should stop the server thread from receiving further requests

其思想是向服务器发送一个关闭,这样线程最多将为它已经在服务的请求提供服务,然后退出serve_forever()循环。 这将导致线程本身在退出createAndStartServer函数时停止。我不知道这是否是最好的方法,但我觉得这听起来很合乎逻辑,在java中我也经常这样做,通过修改处理线程服务器循环的布尔变量的值……我认为shutdown方法也会这样做,对吧?在

不管怎样,我有一个:

AttributeError: 'NoneType' object has no attribute 'shutdown'

似乎服务器变量根本没有被线程填充。 为什么?当我们在做的时候,告诉我我的逻辑是正确的还是你有更好的主意来处理我的问题。在


Tags: the方法代码程序服务器server线程print
1条回答
网友
1楼 · 发布于 2024-10-03 09:19:36

createAndStartServer()中缺少“全局服务器”。在

默认情况下,python会将server=Threading()视为具有本地作用域的新变量。这就解释了为什么在使用None值之后从main调用它会失败。在

相关问题 更多 >