多处理-get_lock与Lock

时间:2018-11-06 16:35:51

标签: python multiprocessing locking

在搜索有关共享多处理变量的信息时,我注意到有两种更新共享多处理变量的方法:

# 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

例如,实现多处理计数器有什么区别以及应首选哪种方法。

谢谢

1 个答案:

答案 0 :(得分:1)

使用get_lock()的{​​{1}}方法意味着使用该对象的代码无需关心multiprocessing.Value的来源(因为它可以自动创建或是在创建Lock实例时明确传递的。)

另一方面,有些人可能会认为方法B更明确,因此认为它是更好的方法。

要进一步弄乱事情,请考虑另一种“混合”可能性:

Value

所以,我认为最重要的是,最终这只是选择问题和首选的编程风格...