Thread safety and rospy Timer
I'm a little confused by how rospy.Timer works with regards to thread-safety. My understanding of callbacks in rospy in general is they're essentially handled sequentially during calls to Sleep and Spin, meaning they're implicitly threadsafe and I can modify the same data from multiple callbacks within a node without locks or other safeguards.
Timers represent a totally separate thread of execution, albeit one that still runs off of a Rate.sleep() loop. Is it safe to work with data that a Timer interacts with, or do I need to start adding locks in any nodes that have both Subscriptions and Timers?