This is the best article on thread synchronization in Python that I have come across: Thread Synchronization Mechanisms in Python
It is very clearly explained and just helped me solve a major concurrency issues I was having.
Especially interesting is the list of thread safe operations in Python.
Here are some thread-safe operations:
- reading or replacing a single instance attribute
- reading or replacing a single global variable
- fetching an item from a list
- modifying a list in place (e.g. adding an item using append)
- fetching an item from a dictionary
- modifying a dictionary in place (e.g. adding an item, or calling the clear method)
Here is an explanation of global value mutation that are thread safe:
Update: Now I am confused. Doesn't this example in the article contradict bullet point 2 above?
Update Update: See comments below for better explanation and info.