Использование get_lock()
метода multiprocessing.Value
означает, что коду, использующему объект, не нужно заботиться об источнике Lock
(поскольку он мог быть создан автоматически или был передан явно, когда Value
экземпляр создан).
С другой стороны, некоторые могут утверждать, что метод B является более явным, и поэтому считают его лучшим подходом.
Чтобы еще больше запутать, рассмотрим еще одну "гибридную" возможность:
from contextlib import contextmanager
# Method C
@contextmanager
def locked(value):
with value.get_lock():
yield
def my_multiprocessing_worker():
global total_uploaded_files
# do stuff ...
with locked(total_uploaded_files):
# increment shared counter
total_uploaded_files.value += 1
Итак, на мой взгляд, суть в том, что в конечном итоге это просто вопрос выбора и предпочтительный стиль программирования ...