medved/lib/exeq/Executor.py

43 lines
1.3 KiB
Python
Raw Normal View History

2018-04-02 22:41:10 +00:00
from lib import Service, Loader, Loadable
from lib.tasks.worker import worker
from rq import Queue
from redis import Redis
class Executor(Service):
def __init__(self, thread, id, root):
super().__init__(thread, id, root)
self._logger.add_field('service', 'Executor')
self._logger.add_field('vname', self.__class__.__name__)
class RQExecutor(Executor):
def __init__(self, id, root):
super().__init__(self.__run, id, root)
def __run(self):
while self._running:
try:
for pn, pipeline in self.cnf.pipelines:
self._logger.debug("pipeline: %s", pn)
for step in pipeline.steps:
self._logger.debug("step: %s", step.name)
redis_conn = Redis(host=self.lcnf.redis.host)
q = Queue('worker', connection=redis_conn)
filter = {
"not_exist": [
pn + '_' + step.name
]
}
items = []
if step.multiple != False:
items = self._data.get(count=step.multiple, filter=filter)
else:
items = self._data.get(filter=filter)
for i in items:
q.enqueue(Loader(step.package).get(step.service), i)
except Exception as e:
self._logger.error(e)