开发者社区> 问答> 正文

持续监控Tornado Python框架中的套接字

我正在使用Tornado,并且想连续监视套接字以获取来自DB服务器的通知。到目前为止,我的应用程序如下所示:

import functools
import tornado
import tornado.httpserver
from tornado.ioloop import IOLoop

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [(r"/", MyHandler),]
        super(Application, self).__init__(handlers)
        fd = get_socket_file_descriptor()
        callback = functools.partial(self.my_callback)
        io_loop = IOLoop.current()
        io_loop.add_handler(fd, callback, io_loop.READ)

    def my_callback(self, fd, events):
        # do something
        pass

if __name__ == '__main__':
    http_server = tornado.httpserver.HTTPServer(Application())
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

我的问题是,只要套接字上有活动,回调就会被无限调用。我希望IOLoop处理该回调,然后返回侦听文件描述符。

展开
收起
祖安文状元 2020-02-23 16:13:59 725 0
1 条回答
写回答
取消 提交回答
  • 在IOLoop只要有要读取的数据会反复调用处理。您的回调必须使用套接字中的所有数据,以使其再次变为空闲状态。

    2020-02-23 16:14:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载