When running Django with Gunicorn with multiple processes/workers I'm 
getting a deadlock issue with some of my manual MySQL database transactions.

    DatabaseError(1205, 'Lock wait timeout exceeded; try restarting 
transaction')

My setup uses multiple databases, and my function needs to be passed the 
database to use when it's called. For this reason, I can't use the standard 
[Django transaction 
decorators](https://docs.djangoproject.com/en/1.4/topics/db/transactions/) 
as the db needs to be hard-coded as an argument. I've inspected the 
decorator code to look at how transactions are managed, and my function 
looks like this:

    from django.db import connections

    def process(self, db, data):

        # Takeover transaction management
        connections[db].enter_transaction_management(True)
        connections[db].managed(True)

        # Process
        try:
            # do things with my_objects...
            for obj in my_objects:
                obj.save(using=db)
            connections[db].commit()
        except Exception as e:
            connections[db].rollback()
        finally:
            connections[db].leave_transaction_management()

Can anyone spot what may be going wrong here?

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-users/-/o4j00SlcSNwJ.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to