【问题标题】:python watchdog using uwsgi api when file changepython看门狗在文件更改时使用uwsgi api
【发布时间】:2014-06-19 07:53:03
【问题描述】:

每当我尝试此代码和文件更新时,我都会在命令行上收到以下消息:

SystemError: 你只能从 main 调用 uwsgi api 函数 可调用

谁能向我解释一下如何正确地做到这一点?

谢谢!

#!/usr/bin/env python
import logging
import time
from flask import Flask, render_template
from flask.ext.uwsgi_websocket import WebSocket
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer

logging.basicConfig(level=logging.ERROR)

app = Flask(__name__)
ws = WebSocket(app)

class MyEventHandler(FileSystemEventHandler):
    def __init__(self, observer, filename, ws):
        self.observer = observer
        self.filename = filename
        self.ws = ws

    def on_modified(self, event):
        self.ws.send('The file is updated!')

@ws.route('/')
def websocket_server(ws):
    path = '/var/lib/omniwallet/addr/'
    observer = Observer()

    while True:
        address = ws.receive()
        if address is not None:
            filename = address + '.json'

            event_handler = MyEventHandler(observer, filename, ws)
            observer.schedule(event_handler, path, recursive=False)
            observer.start()

            try:
                while True:
                    time.sleep(1)
            except KeyboardInterrupt:
                observer.stop()
            observer.join()

        else: return

if __name__ == '__main__':
    app.run(debug=True, threads=16)

【问题讨论】:

  • 你修好了吗?我有一个类似的问题。可以分享一下吗

标签: python uwsgi python-watchdog


【解决方案1】:

您不能使用这种方法,因为观察者在另一个线程中运行,与管理请求的线程完全无关。您可以使用线程队列更改逻辑:MyEventHandler 写入队列,而主可调用对象等待它并发送回 websocket 消息。

【讨论】:

    猜你喜欢
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多