Python 我应该使用MySQL锁表还是有更好的解决方案?

Python 我应该使用MySQL锁表还是有更好的解决方案?,python,mysql,locking,multiprocessing,Python,Mysql,Locking,Multiprocessing,我正在处理一个多进程应用程序,每个进程有时会执行以下代码: db_cursor.execute("SELECT MAX(id) FROM prqueue;") for record in db_cursor.fetchall(): if record[0]: db_cursor.execute("DELETE FROM prqueue WHERE id='%s'" % record[0]); db_connector.commit() 我面临以下问题:

我正在处理一个多进程应用程序,每个进程有时会执行以下代码:

db_cursor.execute("SELECT MAX(id) FROM prqueue;")

for record in db_cursor.fetchall():
    if record[0]:
        db_cursor.execute("DELETE FROM prqueue WHERE id='%s'" % record[0]);
        db_connector.commit()
我面临以下问题:可能有一种情况,两个进程取相同的最大值,并且都试图删除这个值。这种情况在我的应用程序中是不可接受的,每个值只能由一个进程获取(并删除)

我怎样才能做到这一点?在获取最大值和删除时表锁定是绝对必要的,还是有另一种很好的方法可以做到这一点


谢谢。

考虑使用
GET_LOCK()
模拟记录锁

选择要锁定的op的特定名称。e、 g.
'prqueue\u max\u del'

调用
选择GET\u LOCK('prqueue\u max\u del',30)
以锁定名称
'prqueue\u max\u del'
。。如果名称可用,它将返回1并设置锁;如果30秒后锁不可用,则返回0(第二个参数是超时)

完成后使用
选择释放锁定(“prqueue\U max\U del”)

您必须在每个事务中使用相同的名称,在事务中再次调用
GET\u LOCK()
将释放先前设置的锁

当心;由于只有抽象名称被锁定,所有其他不使用此方法和抽象名称的进程都可以独立地对表进行野蛮攻击