2

这个问题已经解决了!

我有一个问题:我是 Python 新手,我想做多个循环。我想运行一个 WebSocket 客户端(Autobahn),并且我想运行一个循环来显示在特定文件夹(pyinotify 或 Watchdog)中编辑的文件。

两者都在永远运行,太好了。有没有办法在我运行 FileSystemWatcher 时一次运行它们并通过 WebSocket 连接发送消息,比如回调、多线程、多处理或只是单独的文件?

    factory = WebSocketClientFactory("ws://localhost:8888/ws", debug=False)
    factory.protocol = self.webSocket
    connectWS(factory)
    reactor.run()

如果我们运行它,它将成功。但是如果我们运行这个:

    factory = WebSocketClientFactory("ws://localhost:8888/ws", debug=False)
    factory.protocol = self.webSocket
    connectWS(factory)
    reactor.run()

    # Websocket client running now,running the filewatcher     

    wm = pyinotify.WatchManager()

    mask = pyinotify.IN_DELETE | pyinotify.IN_CREATE  # watched events

    class EventHandler(pyinotify.ProcessEvent):
        def process_IN_CREATE(self, event):
            print "Creating:", event.pathname

        def process_IN_DELETE(self, event):
            print "Removing:", event.pathname
    handler = EventHandler()
    notifier = pyinotify.Notifier(wm, handler)
    wdd = wm.add_watch('/tmp', mask, rec=True)
    notifier.loop()

这将创建 2 个循环,但由于我们已经有一个循环,'reactor.run()' 之后的代码根本不会运行。

供您参考:该项目将成为同步客户端。

非常感谢!

编辑:有一个错误。( http://pastebin.com/zHNG2c6U ) 我现在不知道该怎么办..

网络套接字类:

class webSocket(WebSocketClientProtocol):
    def sendHello(self):
        pass

    def onOpen(self):
        self.sendHello()

    def onMessage(self, msg, binary):
        print "Got echo: " + msg
        reactor.callLater(1, self.sendHello)

    def notify(ignore, filepath, mask):
        print "CALLBACK"
        #print "event %s on %s" % (', '.join(inotify.humanReadableMask(mask)), filepath)

edit2:你可以在这里看到完整的代码:http: //pastebin.com/iHKRcLVA

最后编辑:大家,谢谢你给我回复!将回调“def”从类中取出效果很好!

4

2 回答 2

1

Autobahn 建立在 Twisted 之上,这是一个异步应用程序框架。您不需要显式线程来使这一切正常工作。您可以改为使用twisted.internet.inotify实现 FileSystemWatcher 类(这里有一个示例)。

我不知道这两个组件如何相互通信,因为我已经多年没有使用 Twisted。但是这里有一个与串行端口进行桥接的示例。

于 2013-11-02T09:35:02.380 回答
1

Autobahn repo 中有一个完整的演示,用于通过 WebSocket 进行基于通知监视和发布。

这适用于 Windows,并在后台线程上运行监视。对于 Unix,您应该遵循 Marcelo 的建议并使用 Twisted 附带的异步功能。

于 2013-11-02T09:48:40.733 回答