Python中使用D-Bus异步方法调用的线程安全性
我写了一个Python类,它通过D-Bus进行异步方法调用。当我的回复处理函数被调用时,它会把数据存储在一个列表里。这个列表可以被另一个类的方法同时使用。这样做安全吗?还是说我只能使用像队列(Queue)这样的同步数据结构?
1 个回答
0
如果你在回调的上下文中没有修改列表,那么你就不一定需要同步处理。你只需要知道这个列表的状态是“易变”的,也就是说它可能会在不同的地方被改变。
但是,如果你需要在回调处理程序中修改列表,同时在主执行上下文(或者其他线程等)中也要修改,那么你就需要进行同步处理了。
Python中的同步Queue
非常适合用来处理消息,它可以让你按照事件到达的顺序,依次执行操作。这不仅让代码更简单易懂,也更容易追踪重要的状态变化。通常来说,回调函数不应该太复杂,因为调用回调的外部环境通常不需要处理你代码中抛出的异常。此外,还有时间上的考虑——回调会阻塞异步发射器的上下文,所以保持处理程序简短明了也是个好主意。