在搜索有关共享多处理变量的信息时,我注意到有两种方法可以更新共享多处理变量:
# Our shared variable
total_uploaded_files = multiprocessing.Value('I', 0)
lock = multiprocessing.Lock()
# Method A
def my_multiprocessing_worker():
global total_uploaded_files
# do stuff ...
with total_uploaded_files.get_lock():
# increment shared counter
total_uploaded_files.value += 1
# Method B
def my_multiprocessing_worker():
global total_uploaded_files, lock
# do stuff ...
with lock:
# increment shared counter
total_uploaded_files.value += 1有什么区别,应该选择哪种方法来实现多处理计数器,例如。
谢谢
发布于 2018-11-06 17:21:26
使用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所以,在我看来,底线是,它最终只是一个选择的问题和首选的编程风格.
https://stackoverflow.com/questions/53176140
复制相似问题