3
여러 프로세스에서 동시에 테이블을 수정하는 방법에 대해 혼란스러워합니다. 나는 Query.with_lockmode()
을 사용해 보았지만, 두 프로세스가 동시에 같은 행을 쿼리하는 것을 막을 수있을 것이라고 기대하지는 않는 것 같습니다. 여기에 내가 무엇을 시도했다입니다 :sqlalchemy에서 잠그기
import time
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import *
engine = create_engine('mysql://...?charset=utf8&use_unicode=0', pool_recycle=3600, echo=False)
Base = declarative_base(bind=engine)
session = scoped_session(sessionmaker(engine))
class Test(Base):
__tablename__ = "TESTXYZ"
id = Column(Integer, primary_key=True)
x = Column(Integer)
def keepUpdating():
test = session.query(Test).filter(Test.id==1).with_lockmode("update").one()
for counter in range(5):
test.x += 10
print test.x
time.sleep(2)
session.commit()
keepUpdating()
내가 두 번 동시에이 스크립트를 실행하면, 나는 (그것을 시작하는 0이었다 가정) (50)와 동일한 session.query(Test).filter(Test.id==1).one().x
보다는 100을 내가 바라던 된 얻을. 두 프로세스 모두 값을 동시에 업데이트하거나 첫 번째 프로세스가 완료 될 때까지 두 번째 프로세스를 기다리는 방법은 무엇입니까?
감사합니다. 정말 바보 같은 실수입니다. 내가 그걸로 많은 시간을 보냈다는 것을 믿을 수 없다. – Noah