Ich arbeite gerade an einem Modularen System wo die einzelnen module über "Flags" gesteuert werden

Code:
Tabelle Datensatz:

ID | FlagA | FlagB

Module 1:

Select * from Datensatz where FlagA = 0 FOR UPDATE

Module 2: 

Select * from Datensatz wehre FlagA = 1 and FlagB = 0 FOR Update
Ich hatte bei diesem Szenario angenommen, dass es zu keinen "Deadlocks" kommen würde, die meine Python Skripte schmeissen da sie kein Timeout haben.

Meine Annahme war dass die MySQL nur die betreffenden Zeilen Sperrt entweder wo FlagA = 0 oder eben = 1 ist. So dass diese beiden Module keine überschneidung haben sollte.

Dennoch bekomme ich immer wieder eine Exception beim Anfordern der Sperre.

Habt ihr eine Idee wie ich meine Locking Strategy verbessern kann ?