如何关闭 Tornado 打开的所有套接字?

How do I close all sockets opened by Tornado?

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)

Traceback (most recent call last):

File "", line 1, in

TypeError: unbound method close() must be called with IOLoop instance as first argument (got nothing instead)

如何关闭所有套接字以便从头开始重新启动?

有意思。

首先,您应该为 tornado.ioloop.IOLoop object 调用 close() 方法,而不是为 class object.您可以使用 tornado.ioloop.IOLoop.current().

方法获取当前 tornado.ioloop.IOLoop 对象

示例:

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

进一步阅读:

就我而言,问题不在于 Tornado,而是在于它启动的一个进程,即使在它失去对它的跟踪后仍在继续。

当我重新启动计算机时,OSX 会跟踪进程,但 Tornado 不会。解决方案是找到打开的端口并关闭 Tornado 使用的端口。

原答案出自这里:

//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