51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
import os
|
|
import sys
|
|
|
|
from celery import Celery
|
|
from celery.signals import task_prerun
|
|
|
|
from config import TASKS_IN_DIR, TASKS_PROC_DIR, TASKS_BUF_DIR
|
|
|
|
from oshipka.persistance import db
|
|
|
|
worker_app = Celery(__name__)
|
|
worker_app.conf.update({
|
|
'broker_url': 'filesystem://',
|
|
'result_backend': "file://{}".format(TASKS_PROC_DIR),
|
|
'broker_transport_options': {
|
|
'data_folder_in': TASKS_IN_DIR,
|
|
'data_folder_out': TASKS_IN_DIR,
|
|
'data_folder_processed': TASKS_PROC_DIR,
|
|
},
|
|
'imports': ('tasks',),
|
|
'result_persistent': True,
|
|
'task_serializer': 'json',
|
|
'result_serializer': 'json',
|
|
'accept_content': ['json']})
|
|
|
|
|
|
class Unbuffered(object):
|
|
def __init__(self, stream):
|
|
self.stream = stream
|
|
|
|
def write(self, data):
|
|
self.stream.write(data)
|
|
self.stream.flush()
|
|
|
|
def writelines(self, datas):
|
|
self.stream.writelines(datas)
|
|
self.stream.flush()
|
|
|
|
def __getattr__(self, attr):
|
|
return getattr(self.stream, attr)
|
|
|
|
|
|
@task_prerun.connect
|
|
def before_task(task_id=None, task=None, *args, **kwargs):
|
|
from oshipka import app
|
|
sys.stdout = Unbuffered(open(os.path.join(TASKS_BUF_DIR, task_id), 'w'))
|
|
sys.stderr = Unbuffered(open(os.path.join(TASKS_BUF_DIR, task_id), 'w'))
|
|
db.init_app(app)
|
|
app.app_context().push()
|
|
app.test_request_context().push()
|