Ответ 1
Нет никакой официальной модели для потоковой обработки Python (эй, в конце концов, для Java не было ни одного года... надеюсь, что в конце концов будет написано и для Python).
На практике никакая реализация Python не выполняет какую-либо расширенную оптимизацию, такую как переупорядочение операторов или временное обращение к общим переменным как поточно-локальные, и вы можете рассчитывать на эти ограничения семантики, даже если они официально не гарантированы.
CPython, в частности, как упоминает @Rawheiser, использует глобальную блокировку интерпретатора; другие реализации (PyPy, IronPython, Jython,...) не позволяют (поэтому они могут эффективно использовать несколько ядер с моделью потоков, в то время как CPython требует многопроцессорной обработки для той же цели), поэтому вы не должны рассчитывать на это, если хотите для написания кода, который переносится во всех реализациях Python. (Таким образом, вы не должны рассчитывать на "атомарность" операций, которые только бывают атомарными в CPython из-за GIL, таких как доступ к словарю, - в других реализациях Python, несколько потоков могут одновременно модифицировать dict и вызывать ошибки, если вы не защитите dict с помощью блокировки или тому подобного).