Безопасность потоков в python с использованием асинхронных вызовов D-Bus - PullRequest
0 голосов
/ 15 июня 2010

Я пишу класс Python, который делает асинхронные вызовы методов, используя D-Bus.Когда вызывается мой reply_handler, он сохраняет данные в списке.Этот список может одновременно использоваться другими методами класса.Это безопасно, или я могу использовать только синхронизированные структуры данных, такие как класс очереди?

1 Ответ

0 голосов
/ 15 июня 2010

Если вы не изменяете список вне контекста обратного вызова, то вам не обязательно нужна синхронизация - вам просто нужно знать, что состояние объекта списка является изменчивым.

Если список необходимо изменить как в обработчике обратного вызова, так и, скажем, в главном контексте выполнения (или других потоках и т. Д.), Тогда да, вам потребуется синхронизация.

Python synchronized Queue работает естественным образом для насосов сообщений - позволяя вам выполнять действия последовательно в том порядке, в котором события происходят в одном из ваших собственных контекстов. Это также способствует простоте кода и удобочитаемости, поскольку основные изменения состояния легче отслеживать. Как правило, обратные вызовы не должны быть слишком сложными, поскольку внешний контекст, в котором вызываются обратные вызовы, не должен (и, вероятно, не должен) иметь дело с исключениями, возникающими из вашего кода. Также есть потенциальные временные соображения - обратный вызов блокирует контекст асинхронного излучателя - поэтому держать обработчик коротким и приятным тоже хорошо.

...