Commit 9f5b6c0d authored by wang zhengwei's avatar wang zhengwei

使用celery 替代子进程

parent c28c8f6d
...@@ -17,7 +17,7 @@ from sqlalchemy import create_engine ...@@ -17,7 +17,7 @@ from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.pool import NullPool from sqlalchemy.pool import NullPool
env = sys.argv[-1] env = sys.argv[-1] if sys.argv[-1] in ["dev", "test", "prod"] else "test"
work_dir = os.getcwd() work_dir = os.getcwd()
CFG_FILEPATH = work_dir + '/app/config/config.yaml' CFG_FILEPATH = work_dir + '/app/config/config.yaml'
...@@ -95,6 +95,11 @@ redis = redis.StrictRedis( ...@@ -95,6 +95,11 @@ redis = redis.StrictRedis(
password=config[env]['redis']['password'] password=config[env]['redis']['password']
) )
redis_host=config[env]['redis']['host'],
redis_port=config[env]['redis']['port'],
redis_db=config[env]['redis']['db'],
redis_password=config[env]['redis']['password']
logging.basicConfig(level=logging.INFO, logging.basicConfig(level=logging.INFO,
filename=work_dir + config[env]['log']['filename'], filename=work_dir + config[env]['log']['filename'],
filemode=config[env]['log']['filemode'], filemode=config[env]['log']['filemode'],
......
from celery import Celery
from sqlalchemy import and_, or_
from app.api.engine import TAMP_SQL, tamp_diagnose_app_engine, template_folder, temp_img_save_folder, \
redis_host, redis_port, redis_db, redis_password
from app.model.tamp_diagnose_app import HoldReport, HoldDiagnoseReport, PeriodicReport, Customer, ReportView
from app.utils.jinjia2html_v2 import DataIntegrate
celery_app = Celery(__name__)
celery_conf = "redis://:{}@{}:{}/{}".format("qimeng123","118.190.63.109","56379","1")
celery_app.conf.update({"broker_url": celery_conf, "result_backend": celery_conf})
@celery_app.task
def save_pdf(ifa_id, customer_id, pdf_name, type, report_data):
"""
加法
:param x:
:param y:
:return:
"""
try:
dt = DataIntegrate(ifa_id=ifa_id, customer_id=customer_id, pdf_name=pdf_name, type=type)
dt.render_data(data=report_data)
except:
pass
with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_diagnose_session = tamp_diagnose_app.session
if type == 1:
res = tamp_diagnose_session.query(HoldReport).filter(and_(
HoldReport.id == id,
HoldReport.ifa_id == ifa_id,
))
elif type == 2:
res = tamp_diagnose_session.query(HoldDiagnoseReport).filter(and_(
HoldDiagnoseReport.id == id,
HoldDiagnoseReport.ifa_id == ifa_id,
))
elif type == 3:
res = tamp_diagnose_session.query(PeriodicReport).filter(and_(
PeriodicReport.id == id,
PeriodicReport.ifa_id == ifa_id,
))
else:
return False
res.update({
'file': pdf_name,
'update_status': 2,
'update_time': datetime.datetime.now()
})
return True
...@@ -17,6 +17,7 @@ from sqlalchemy import and_, or_ ...@@ -17,6 +17,7 @@ from sqlalchemy import and_, or_
from app.api.engine import TAMP_SQL, tamp_diagnose_app_engine, template_folder, temp_img_save_folder from app.api.engine import TAMP_SQL, tamp_diagnose_app_engine, template_folder, temp_img_save_folder
from app.model.tamp_diagnose_app import HoldReport, HoldDiagnoseReport, PeriodicReport, Customer, ReportView from app.model.tamp_diagnose_app import HoldReport, HoldDiagnoseReport, PeriodicReport, Customer, ReportView
from app.utils.jinjia2html_v2 import DataIntegrate from app.utils.jinjia2html_v2 import DataIntegrate
from app.celery import save_pdf
def get_report_list(args): def get_report_list(args):
...@@ -138,68 +139,43 @@ def edit_report(args): ...@@ -138,68 +139,43 @@ def edit_report(args):
return False return False
r = res.update({ r = res.update({
'report_data': report_data, 'report_data': report_data,
'update_time': datetime.datetime.now()
})
pid = os.fork()
if pid == 0:
with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_diagnose_session = tamp_diagnose_app.session
hold_report = tamp_diagnose_session.query(HoldReport).filter(and_(
HoldReport.id == id,
HoldReport.ifa_id == ifa_id,
))
hold_diagnose_report = tamp_diagnose_session.query(HoldDiagnoseReport).filter(and_(
HoldDiagnoseReport.id == id,
HoldDiagnoseReport.ifa_id == ifa_id,
))
periodic_report = tamp_diagnose_session.query(PeriodicReport).filter(and_(
PeriodicReport.id == id,
PeriodicReport.ifa_id == ifa_id,
))
if type == 1:
res = hold_report
elif type == 2:
res = hold_diagnose_report
elif type == 3:
res = periodic_report
if not res:
return False
res.update({
'update_status': 1, 'update_status': 1,
'update_time': datetime.datetime.now() 'update_time': datetime.datetime.now()
}) })
try:
dt = DataIntegrate(ifa_id=ifa_id, customer_id=res[0].customer_id, pdf_name=pdf_name, type=type) save_pdf.delay(ifa_id, customer_id, pdf_name, type, report_data)
dt.render_data(data=json.loads(report_data.replace(template_folder, temp_img_save_folder))) # try:
except: # dt = DataIntegrate(ifa_id=ifa_id, customer_id=res[0].customer_id, pdf_name=pdf_name, type=type)
pass # dt.render_data(data=json.loads(report_data.replace(template_folder, temp_img_save_folder)))
with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app: # except:
tamp_diagnose_session = tamp_diagnose_app.session # pass
hold_report = tamp_diagnose_session.query(HoldReport).filter(and_( # with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
HoldReport.id == id, # tamp_diagnose_session = tamp_diagnose_app.session
HoldReport.ifa_id == ifa_id, # hold_report = tamp_diagnose_session.query(HoldReport).filter(and_(
)) # HoldReport.id == id,
hold_diagnose_report = tamp_diagnose_session.query(HoldDiagnoseReport).filter(and_( # HoldReport.ifa_id == ifa_id,
HoldDiagnoseReport.id == id, # ))
HoldDiagnoseReport.ifa_id == ifa_id, # hold_diagnose_report = tamp_diagnose_session.query(HoldDiagnoseReport).filter(and_(
)) # HoldDiagnoseReport.id == id,
periodic_report = tamp_diagnose_session.query(PeriodicReport).filter(and_( # HoldDiagnoseReport.ifa_id == ifa_id,
PeriodicReport.id == id, # ))
PeriodicReport.ifa_id == ifa_id, # periodic_report = tamp_diagnose_session.query(PeriodicReport).filter(and_(
)) # PeriodicReport.id == id,
if type == 1: # PeriodicReport.ifa_id == ifa_id,
res = hold_report # ))
elif type == 2: # if type == 1:
res = hold_diagnose_report # res = hold_report
elif type == 3: # elif type == 2:
res = periodic_report # res = hold_diagnose_report
if not res: # elif type == 3:
return False # res = periodic_report
res.update({ # if not res:
'file': pdf_name, # return False
'update_status': 2, # res.update({
'update_time': datetime.datetime.now() # 'file': pdf_name,
}) # 'update_status': 2,
# 'update_time': datetime.datetime.now()
# })
return True return True
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment