곧장 부딪히게 될 flag
Python sqlite3.Connection은 기본적으로 자기를 만든 thread에서만 쓸 수 있어. 다른 thread에서 쓰면 ProgrammingError: SQLite objects created in a thread can only be used in that same thread가 튀어나와.
여러 thread를 쓰는 앱에서 이걸 푸는 방법은 셋이야.
- thread마다 connection 하나 — 보통
threading.local()로 해. 단순하고 안전해. - Connection pool — 수명이 짧은 thread가 많은 앱에 맞아. SQLAlchemy 같은 도구가 알아서 챙겨줘.
- check_same_thread=False에 직접 만든 lock — 안전장치를 끄고 접근을 네가 줄 세우는 거야. 망치기 쉬우니까 지금 뭘 하는지 정확히 알 때만 해.
Self-reference: 피파 backend는 thread 대신
aiosqlite를 써. track 7에서 다뤄. 그러면 이 문제 자체를 통째로 비켜가. async task는 정의상 한 thread 안에 있으니까. sync로 thread를 쓰는 코드라면 thread마다 connection을 두는 게 심심하지만 정확한 기본이야.