2010-06-15 3 views
0

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

ответ

0

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

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

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

+0

спасибо. В моем случае изменение списка вне обычно. Поэтому я решил сохранить только входящие данные в send_handler с помощью Queue. Основной цикл программы периодически проверяет эту очередь и безопасно добавляет ее содержимое в список. – chatbot

 Смежные вопросы

  • Нет связанных вопросов^_^