Как лучше всего хранить локальные данные потоков в приложении PyQt?
Мое приложение использует как QThread
s, так и через некоторые зависимости также собственные нити Python (из модуля threading
). Мой конкретный пример использования локального хранилища потоков в основном связан с первым.
Я вижу некоторые варианты.
Использовать threading.local
. При вызове из потока, чуждого threading
, threading.current_thread()
возвращает объект _DummyThread
. AFAICT, threading.local
поддерживает фиктивные нити, но кажется хрупким. В частности, поскольку DummyThread
никогда не удаляется , хранилище не будет очищено при выходе из потока. Очевидно, я не хочу утечки памяти.
Когда я знаю, что рассматриваемый код всегда будет выполняться в QThread
, я мог бы просто сохранить данные непосредственно в объекте потока, полученном с помощью QThread::getCurrentThread()
. Не знаю, что произойдет, если будет вызван из потока не из Qt.
Есть ли в PyQt эквивалент QThreadStorage
? В Qt это шаблон, а не класс, поэтому я не думаю, что он доступен в PyQt.