I generated some delayed tasks. Then I fired up 3 task runners like this:
python -u manage.py process_tasks --duration 0 > "bg_runner1.txt" 2>&1 &
python -u manage.py process_tasks --duration 0 > "bg_runner2.txt" 2>&1 &
python -u manage.py process_tasks --duration 0 > "bg_runner3.txt" 2>&1 &
(I did 3 concurrently to simulate how I'd have it deployed on 3 production servers.)
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/core/management/base.py", line 393, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/core/management/base.py", line 444, in execute
output = self.handle(*args, **options)
File "/Users/gpinero/portals-fe/background_task/management/commands/process_tasks.py", line 86, in handle
if not self._tasks.run_next_task():
File "/Users/gpinero/portals-fe/background_task/tasks.py", line 102, in run_next_task
return self._runner.run_next_task(self)
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/utils/decorators.py", line 145, in inner
return func(*args, **kwargs)
File "/Users/gpinero/portals-fe/background_task/tasks.py", line 229, in run_next_task
self.run_task(tasks, task)
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/utils/decorators.py", line 145, in inner
return func(*args, **kwargs)
File "/Users/gpinero/portals-fe/background_task/tasks.py", line 218, in run_task
tasks.run_task(task.task_name, args, kwargs)
File "/Users/gpinero/portals-fe/background_task/tasks.py", line 100, in run_task
self._bg_runner(proxy_task, *args, **kwargs)
File "/Users/gpinero/portals-fe/background_task/tasks.py", line 57, in bg_runner
task.reschedule(t, e, traceback)
File "/Users/gpinero/portals-fe/background_task/models.py", line 169, in reschedule
self.increment_attempts()
File "/Users/gpinero/portals-fe/background_task/models.py", line 157, in increment_attempts
self.save()
File "/Users/gpinero/portals-fe/background_task/models.py", line 208, in save
return super(Task, self).save(*arg, **kw)
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/db/models/base.py", line 734, in save
force_update=force_update, update_fields=update_fields)
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/db/models/base.py", line 762, in save_base
updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/db/models/base.py", line 827, in _save_table
forced_update)
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/db/models/base.py", line 877, in _do_update
return filtered._update(values) > 0
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/db/models/query.py", line 580, in _update
return query.get_compiler(self.db).execute_sql(CURSOR)
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 1062, in execute_sql
cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 840, in execute_sql
cursor.execute(sql, params)
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/db/backends/utils.py", line 59, in execute
self.db.validate_no_broken_transaction()
File "/Users/gpinero/sx_direct_env/lib/python2.7/site-packages/django/db/backends/base/base.py", line 327, in validate_no_broken_transaction
"An error occurred in the current transaction. You can't "
django.db.transaction.TransactionManagementError: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block.