2016-11-29 12 views
0

단일 DB 파일이 있고 여러 프로세스에서 연결을 열려고합니다 (반드시 동시 일 필요는 없습니다).파이썬 다중 처리로 다중 sqlite3 연결 열기

내가보고있는 것은 DB가 주 프로세스에서 열리면 연결이 닫혀 있더라도 하위 프로세스에서 동일한 DB를 열 수 없다는 것입니다.

나는 이것을 보여주기 위해 작은 예제를 만들었습니다

import sqlite3 
import multiprocessing 

DB='cache.sqlite' 

def connect(): 
    conn=sqlite3.connect(DB, check_same_thread=False, detect_types=sqlite3.PARSE_DECLTYPES,timeout=1) 
    print 'Opened connection' 
    conn.commit() 
    conn.close() 

connect() 
multiprocessing.Process(target=connect, args=()).start() 

이 인쇄 하나의 '오픈 연결'자식 프로세스를 열려면 실패로 실행.

마스터 프로세스의 연결 줄에 주석을 추가하면 자식 프로세스가 파일을 성공적으로 엽니 다.

현재 무슨 일입니까?

+0

빈 파일로 인해 연결이 두 번 열렸습니다. – wrwrwr

+2

SQLite는 동시 액세스에 제한이있는 것으로 알려져 있습니다. 위의 코드는 단순화되어 작동하지만 수정 구문을 추가하자마자 중단 될 수 있습니다. –

+0

감사합니다. @ wrwrwr, 예, 내 파일은 실제로 채워진 DB입니다. –

답변

0

좋아, 그래서 맥 OSX 나쁜 sqlite 라이브러리에 문제를 추적했습니다.

최신 번들 OSX sqlite 라이브러리가있는 충돌/segfaults에 대한 웹에 대한 많은 의견이 있습니다.

내가 원래 만든 sqlite는 homebrew를 사용하여 설치되었고 원래의 sqlite에 대한 링크가있는 새로운 python이 설치되었습니다. 이 문제가 해결 된 것 같습니다.

관련 문제