: 이것은있다 "sqlite3를하고 멀티"라는 질문은하지만 문제는 실제로 약 멀티 스레딩이고 그래서 허용 대답은하지 않습니다 중복)멀티 프로세스 SQLite는 INSERT : "데이터베이스가 잠겨"
저는 다중 프로세스 스크립트를 구현하고 있습니다. 각 프로세스는 sqlite 테이블에 결과를 작성해야합니다. 내 프로그램은 database is locked
(한 번에 하나의 DB 수정 만 허용되는 sqlite 사용)으로 계속 충돌합니다. 여기
scan()
에 글로벌로 사용하여 잠금을 사용하려고했습니다
def scan(n):
n = n + 1 # Some calculation
cur.execute(" \
INSERT INTO hello \
(n) \
VALUES ('"+n+"') \
")
con.commit()
con.close()
return True
if __name__ == '__main__':
pool = Pool(processes=int(sys.argv[1]))
for status in pool.imap_unordered(scan, range(0,9999)):
if status:
print "ok"
pool.close()
하지만 점점 저를 멈추지 않았다 database is locked
.
하나의 INSERT 문만 다중 프로세스 Python 스크립트에서 동시에 발급되도록하는 올바른 방법은 무엇입니까?
편집 :
내가 데비안 기반 리눅스에서 실행하고 있습니다.
운영 체제 란 무엇입니까? SQLite는 경쟁 저자 간의 경쟁을위한 자문/지역 잠금을 지원하므로 적절한 구성을 사용하여 적절한 운영 체제에서 한 번에 하나의 쓰기가 발생할 수 있지만이 작업이 아니라 다른 작성자가 느리게/막히는 결과를 초래합니다 . –
자세한 내용은 http://www.sqlite.org/lockingv3.html에서 설명합니다. 특히 SQLite의 버전은 무엇입니까? 3.0 이전 버전 인 경우 (10 년이 넘은 경우),이 기능을 사용할 수 없습니다. –
그런데 완전히 다른 메모에서 SQL 연결을 만들기 위해 문자열 연결을 사용하지 마십시오. 그 방법은 바비 테이블을 거짓말 ... –