如何关闭Tornado打开的所有插座?

时间:2017-07-19 00:54:33

标签: python sockets tornado

龙卷风有一个开放的插座,我似乎无法将其关闭。

自上次我一次运行此服务器以来,我一直打开和关闭电脑,终于没有运行,我感到非常惊讶。总而言之,我认为这台服务器已经过去一周了。

我迄今为止尝试过的事情是这个类似问题的解决方案:python websocket with tornado. Socket aren't closed,它什么也没做。

我尝试过使用IOLoop.close(all_fds=True) PyDoc for this function,它返回了以下错误。

  

>>> tornado.ioloop.IOLoop.close(all_fds = True)

     

追踪(最近一次呼叫最后一次):

     

文件"",第1行,

     

TypeError:必须使用IOLoop实例作为第一个参数调用未绑定方法close()(没有任何内容)

如何关闭所有套接字以便我可以从干净的平板再次启动?

2 个答案:

答案 0 :(得分:1)

有趣。

首先,您应该为close() 对象调用tornado.ioloop.IOLoop方法,而不是类对象。您可以使用tornado.ioloop.IOLoop方法获取当前tornado.ioloop.IOLoop.current()对象。

示例:

my_ioloop = tornado.ioloop.IOLoop.current()
my_ioloop.close(all_fds=True)

进一步阅读:

答案 1 :(得分:0)

在我的情况下,问题不是特定于龙卷风,而是在它开始的过程中,即使在它失去追踪之后它仍在继续。

当我重新启动计算机时,OSX会跟踪该过程,但Tornado却没有。解决方案是找到开放端口并关闭Tornado正在使用的端口。

答案最初来自: https://stackoverflow.com/a/17703016/4808079

//first, check the port which your code opens.
$ sudo lsof -i :8528
COMMAND   PID USER   FD   TYPE            DEVICE SIZE/OFF NODE NAME
Python  29748 root    4u  IPv6 0xe782a7ce5603265      0t0  TCP *:8528 (LISTEN)
Python  29748 root    5u  IPv4 0xe782a7ce4aec61d      0t0  TCP *:8528 (LISTEN)

//then kill the process, using the PID
$ sudo kill 29748