У меня есть распределенная вычислительная среда, в которой используется Celery + RABBITMQ + супервизор. В задачи моего работника входит чтение из базы данных, вычисление некоторых значений и обновление базы данных после завершения процесса. Однако, когда я пытаюсь запустить несколько рабочих распределенным образом, я продолжаю сталкиваться с ошибкой: -
(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")