in Allura/allura/command/taskd.py [0:0]
def worker(self):
from allura import model as M
name = f'{os.uname()[1]} pid {os.getpid()}'
wsgi_app = loadapp('config:%s#task' %
self.args[0], relative_to=os.getcwd())
poll_interval = asint(tg.config.get('monq.poll_interval', 10))
only = self.options.only
if only:
only = only.split(',')
def start_response(status, headers, exc_info=None):
if status != '200 OK':
log.warning(
'Unexpected http response from taskd request: %s. Headers: %s',
status, headers)
def waitfunc_noq():
time.sleep(poll_interval)
def check_running(func):
def waitfunc_checks_running():
if self.keep_running:
return func()
else:
raise StopIteration
return waitfunc_checks_running
waitfunc = waitfunc_noq
waitfunc = check_running(waitfunc)
while self.keep_running:
try:
while self.keep_running:
self.task = M.MonQTask.get(
process=name,
waitfunc=waitfunc,
only=only)
if self.task:
with (proctitle("taskd:{}:{}".format(
self.task.task_name, self.task._id))):
# Build the (fake) request
request_path = '/--{}--/{}/'.format(self.task.task_name,
self.task._id)
r = Request.blank(request_path,
base_url=tg.config['base_url'].rstrip(
'/') + request_path,
environ={'task': self.task,
'nocapture': self.options.nocapture,
})
list(wsgi_app(r.environ, start_response))
self.task = None
except Exception as e:
if self.keep_running:
base.log.exception(
'taskd error %s; pausing for 10s before taking more tasks' % e)
time.sleep(10)
else:
base.log.exception('taskd error %s' % e)
base.log.info('taskd pid %s stopping gracefully.' % os.getpid())
if self.restart_when_done:
base.log.info('taskd pid %s restarting itself' % os.getpid())
os.execv(sys.argv[0], sys.argv) # noqa: S606