Задать вопрос
orsinium
@orsinium
ИБ, Python, Web

Как работать с peewee из нескольких потоков?

Доброго времени суток.

Есть многопоточное приложение, использующее из нескольких потоков peewee. Через некоторое время после запуска вылетает следующее исключение:
peewee.OperationalError: (2006, "MySQL server has gone away (BrokenPipeError(32, 'Broken pipe'))")

В действительности, это, конечно, отваливается PyMySQL, который использует ядро peewee. Исходя из опыта, для работы с PyMySQL помогал threading.Lock:
from threading import Lock
database_locker = Lock()

database_locker.acquire(blocking=True)
pass #работа с БД
database_locker.release()

Вот только в случае peewee это почему-то не работает.
Что думаете? Должен ли помогать threading.Lock, и есть ли другие подходы к решению задачи?

Python 3.4
PyMySQL 0.7.4
peewee 2.8.2
  • Вопрос задан
  • 986 просмотров
Подписаться 3 Оценить 7 комментариев
Решения вопроса 1
orsinium
@orsinium Автор вопроса
ИБ, Python, Web
Если кому-то интересно, то в database.__init__ можно передать аргумент threadlocals=True, который, вроде как, всё чинит. Как я говорил, ошибка проявляется не сразу, так что придётся немного подождать, прежде чем говорить наверняка :)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы