Python 龙卷风和龙卷风

Python 龙卷风和龙卷风,python,asynchronous,tornado,Python,Asynchronous,Tornado,我需要一个异步交互日志操作,当服务器中发生某些文件时,通过2eb套接字读取和写入这些文件,但首先我想了解如何以交互和异步方式读取和写入这些文件 我还在阅读部分 如果我执行以下代码,同时打开控制台并通过 echo foo > file.txt 我在期待龙卷风控制台发生什么事。但是没有什么有什么建议吗?文档中没有任何关于tornado.iostream.PipeIOStream的示例,或者我没有找到它们 import os import tornado.ioloop import torn

我需要一个异步交互日志操作,当服务器中发生某些文件时,通过2eb套接字读取和写入这些文件,但首先我想了解如何以交互和异步方式读取和写入这些文件

我还在阅读部分

如果我执行以下代码,同时打开控制台并通过

echo foo > file.txt
我在期待龙卷风控制台发生什么事。但是没有什么有什么建议吗?文档中没有任何关于tornado.iostream.PipeIOStream的示例,或者我没有找到它们

import os

import tornado.ioloop
import tornado.web

clientpath = '../client'
port = 8888


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("index.html")


def tail(data):
    print "> ", data, " ."

if __name__ == "__main__":
    settings = {
        "template_path": os.path.join(os.path.dirname(__file__), clientpath)
    }

    handlers = [
        (r"/", MainHandler),
    ]

    fd = open("file.txt")
    stream = tornado.iostream.PipeIOStream(fd.fileno())
    stream.read_until('\n', tail)

    application = tornado.web.Application(handlers, **settings)
    application.listen(port)
    tornado.ioloop.IOLoop.instance().start()

底层系统调用select、epoll等并不真正支持常规文件,因此PipeIOStream也不支持。它们之间的距离足够近,有时看起来像是在工作,但当文件发生更改并且在文件末尾有不同的行为时,您实际上无法得到通知。您应该使用管道或套接字进行进程间通信,而不是常规文件


要模拟tail-f的行为,请使用add_timeout或PeriodicCallback定期统计文件,并在文件大小发生变化时从中读取,直到最近,tail-f在大多数系统上都是这样做的。您还可以使用inotify更有效地发现文件何时更改,尽管读者需要练习将inotify与Tornado集成。

我知道这个问题已经很老了,但该库的设计正是为了能够异步读取磁盘,而且可以很好地与龙卷风事件循环配合使用。

我认为避免周期性回调是一种更好的方法。。那么,用一些外部设备来代替普通文件怎么样?通常,如果我打开“/dev/tty..”写,我会得到一个好结果。。它能与PipeIOStream一起工作吗?我自己没有做太多,但我认为PipeIOStream可以与TTY设备一起工作。