我目前正在从事一个涉及三个组成部分的项目
检查目录,工作程序和命令行界面中的更改的观察者。
我想要实现的是:
观察者,当发生更改时,向工作人员发送一个字符串(将工作添加到工作人员的队列中)。
工人有很多工作,并且永远在他的队列中工作。
现在,我希望可以运行python脚本来检查工作程序的状态(活动作业的数量,错误等)
在使用哪个组件以及如何链接这三个组件方面,我不知道如何使用python实现。
虽然我是一个单身工人,但观察者将作业添加到队列中,但1)我无法编写工作代码,并且2)如何使检查器适合?
我想到的另一种解决方案可能是来自有队列的父亲的多个子进程,但我有点迷路...
谢谢您的建议
答案 0 :(得分:0)
我会使用某种observer pattern或publish-subscribe pattern。对于前者,您可以使用Python version中的ReactiveX。但是,对于更基本的示例,让我们继续使用Python内核。程序的某些部分可以订阅工作程序,并通过例如队列从进程接收更新。
import itertools as it
from queue import Queue
from threading import Thread
import time
class Observable(Thread):
def __init__(self):
super().__init__()
self._observers = []
def notify(self, msg):
for obs in self._observers:
obs.put(msg)
def subscribe(self, obs):
self._observers.append(obs)
class Observer(Thread):
def __init__(self):
super().__init__()
self.updates = Queue()
class Watcher(Observable):
def run(self):
for i in it.count():
self.notify(i)
time.sleep(1)
class Worker(Observable, Observer):
def run(self):
while True:
task = self.updates.get()
self.notify((str(task), 'start'))
time.sleep(1)
self.notify((str(task), 'stop'))
class Supervisor(Observer):
def __init__(self):
super().__init__()
self._statuses = {}
def run(self):
while True:
status = self.updates.get()
print(status)
self._statuses[status[0]] = status[1]
# Do something based on status updates.
if status[1] == 'stop':
del self._statuses[status[0]]
watcher = Watcher()
worker = Worker()
supervisor = Supervisor()
watcher.subscribe(worker.updates)
worker.subscribe(supervisor.updates)
supervisor.start()
worker.start()
watcher.start()
但是可能有很多变化,您可以检查最适合您的各种模式。