2015-06-15 30 views
2

我的當前設置包括SQLAlchemy的芹菜任務返回陳舊的數據

瓶,瓶,SQLAlchemy的,芹菜

現在該我遇到的問題是,有時裏面芹菜任務數據庫查詢給人陳舊的數據,即如果我請求表中的最後一條記錄,在查詢前10-15分鐘插入最後一個條目,而我有時會看到像這樣的異常。

OperationalError( 「(OperationalError)(2006,\ 'MySQL服務器已經走了\')」,)」

以下是引用

File "/home/sys_user/repo/my_app/app/tasks/reminders.py", line 63, in run 
    config = Reminder.query.filter_by(id=reminder_id).first() 
    File "/home/sys_user/Envs/flask/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2341, in first 
    ret = list(self[0:1]) 
    File "/home/sys_user/Envs/flask/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2208, in __getitem__ 
    return list(res) 
    File "/home/sys_user/Envs/flask/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2412, in __iter__ 
    return self._execute_and_instances(context) 
    File "/home/sys_user/Envs/flask/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2427, in _execute_and_instances 
    result = conn.execute(querycontext.statement, self._params) 
    File "/home/sys_user/Envs/flask/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 729, in execute 
    return meth(self, multiparams, params) 
    File "/home/sys_user/Envs/flask/local/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 321, in _execute_on_connection 
    return connection._execute_clauseelement(self, multiparams, params) 
    File "/home/sys_user/Envs/flask/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 826, in _execute_clauseelement 
    compiled_sql, distilled_params 
    File "/home/sys_user/Envs/flask/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 958, in _execute_context 
    context) 
    File "/home/sys_user/Envs/flask/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1160, in _handle_dbapi_exception 
    exc_info 
    File "/home/sys_user/Envs/flask/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 199, in raise_from_cause 
    reraise(type(exception), exception, tb=exc_tb) 
    File "/home/sys_user/Envs/flask/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 951, in _execute_context 
    context) 
    File "/home/sys_user/Envs/flask/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 436, in do_execute 
    cursor.execute(statement, parameters) 
    File "/home/sys_user/Envs/flask/local/lib/python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute 
    self.errorhandler(self, exc, value) 
    File "/home/sys_user/Envs/flask/local/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 

以下是我celery_app.py

from app import app as flask_app, db 
from celery.signals import worker_process_init 

def make_celery(app=None): 
    celery = Celery() 
    celery.conf.update(flask_app.config) 
    celery.config_from_object(celeryconfig) 

    TaskBase = celery.Task 

    class ContextTask(TaskBase): 
     abstract = True 

     def __call__(self, *args, **kwargs): 
      with flask_app.app_context(): 
       return TaskBase.__call__(self, *args, **kwargs) 

    db.init_app(flask_app) 
    celery.Task = ContextTask 
    return celery 


celery_instance = make_celery() 


@worker_process_init.connect 
def celery_worker_init_db(**_): 
    db.init_app(flask_app) 

定義了一些任務。

class ReminderTask(Task): 
    ignore_result = True 

    def run(self, data): 
     a = Reminder.query.filter_by(id=int(data['reminder_id'])).first() 
     a.send_reminders() 

回答