我的程序需要一个监听和处理连接的服务器,当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'
似乎服务器变量根本没有被线程填充。 为什么?当我们在做的时候,告诉我我的逻辑是正确的还是你有更好的主意来处理我的问题。在
createAndStartServer()中缺少“全局服务器”。在
默认情况下,python会将server=Threading()视为具有本地作用域的新变量。这就解释了为什么在使用None值之后从main调用它会失败。在
相关问题 更多 >
编程相关推荐