【发布时间】:2014-01-25 08:38:11
【问题描述】:
我有一个分布式计算框架,它使用 Celery + RABBITMQ + supervisor。我的工作人员的任务包括从数据库中读取数据、计算一些值并在处理完成后更新数据库。但是,当我尝试以分布式方式运行多个工作人员时,我一直遇到错误:-
(2014,“命令不同步;您现在无法运行此命令”)
谁能建议我一种设置互斥锁或类似锁文件的机制的方法,以便工作人员可以同时访问数据库。
任何帮助将不胜感激, 谢谢, 阿米特
编辑:-
con = mdb.connect(parameters...)
def reset_table(table_name,con):
with con:
cur = con.cursor(mdb.cursors.DictCursor)
cur.execute("UPDATE " + table_name + " SET active_status = 0 where last_access < (NOW() - INTERVAL 15 MINUTE)")
con.commit()
堆栈跟踪:-
File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 238, in trace_task
R = retval = fun(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 416, in __protected_call__
return self.run(*args, **kwargs)
File "/home/elasticsearch/celery_test/tasks.py", line 183, in download_data
auth = get_auth(con)
File "/home/elasticsearch/celery_test/tasks.py", line 94, in get_auth
reset_table("auths",con)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 249, in __exit__
self.rollback()
ProgrammingError: (2014, "Commands out of sync; you can't run this command now")
【问题讨论】:
标签: mysql locking celery mysql-python django-celery