2014-06-19 2 views
0

이 코드 및 파일 업데이트를 시도 할 때마다, 내가 얻을 명령 줄에 다음과 같은 메시지 :파이썬 감시 할 때 파일 변경

SystemError: you can call uwsgi api function only from the main callable

아무도이 권리를하는 방법을 나에게 설명 할 수 있습니까?

감사합니다. 관찰자가 다른 스레드에서 실행되는

#!/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) 

답변

0

당신은 요청을 관리하는 일에 전혀 관계가없는, 그 접근 방식을 사용할 수 없습니다. 스레드 대기열을 사용하여 논리를 변경할 수 있습니다. 즉, MyEventHandler가 대기열에 쓰고 주 호출 가능자가 대기하고 websocket 메시지를 다시 보냅니다.

관련 문제