在搜索有关共享多处理变量的信息时,我注意到有两种更新共享多处理变量的方法:
# 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
例如,实现多处理计数器有什么区别以及应首选哪种方法。
谢谢
答案 0 :(得分:1)
使用get_lock()
的{{1}}方法意味着使用该对象的代码无需关心multiprocessing.Value
的来源(因为它可以自动创建或是在创建Lock
实例时明确传递的。)
另一方面,有些人可能会认为方法B更明确,因此认为它是更好的方法。
要进一步弄乱事情,请考虑另一种“混合”可能性:
Value
所以,我认为最重要的是,最终这只是选择问题和首选的编程风格...