Поток соединения pymysql безопасен? Безопасен ли поток курсора pymysql?
У меня есть структура данных очереди, где несколько потоков потребляют элементы, каждый поток собирается записывать в базу данных, используя PyMySQL, никакой другой синхронизации между потоками не требуется.
Может ли гонка использовать один и тот же курсор из одного и того же соединения pymysql во всех потоках?
Свободна ли гонка для использования разных курсоров для одного потока из одного и того же соединения?
(конечно, использовать несколько соединений в нескольких потоках - это нормально, потому что в этом случае нет общего ресурса, меня это не интересует)
1 ответ
Спасибо El Ruso за одно направление
Я нашел ответ в источнике pymysql после того, как понял, что в DBAPI2 есть спецификация, указывающая, как ответить на этот вопрос в зависимости от реализации. В случае PyMySQL это означает, что он не является потокобезопасным ни для соединений, ни для курсоров.
https://github.com/PyMySQL/PyMySQL/blob/master/pymysql/__init__.py Line
PyMySQL is threadsafe = 1 означает: потоки могут совместно использовать модуль, но не соединения.
(Прочитайте спецификацию PEP-0249 http://legacy.python.org/dev/peps/pep-0249/)