Эта проблема решена!Python: две петли сразу
У меня проблема: я новичок в Python, и я хочу делать несколько циклов. Я хочу запустить клиент WebSocket (Autobahn), и я хочу запустить цикл, который показывает файл, который редактируется в определенной папке (pyinotify или Watchdog).
Оба работают вечно, отлично. Есть ли способ запустить их сразу и отправить сообщение через соединение WebSocket, когда я запускаю FileSystemWatcher, например, с обратными вызовами, многопоточными, многопроцессорными или просто отдельными файлами?
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) Я понятия не имею, что теперь делать ..
WebSocket Класс:
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» из классов работало хорошо!
Эта ошибка: это, вероятно, проблема с вашим кодом, а не с Twisted. Загрузите свой полный код в GitHub или что-то в этом роде. Это не похоже на код, который вы разместили в своем Q выше. – oberstet
Хорошо, я сделаю это через две минуты! Изменить: посмотрите описание, если хотите :) –
попробуйте: 'def notify (self, ignore, filepath, mask):' .. отметить 'self' – oberstet