【发布时间】:2020-05-20 13:56:32
【问题描述】:
我有一个全局变量,我想用不同的进程写入它(下面的代码)。 我使用可重入锁来避免竞争条件(使用许多线程写入同一个地方)。 有趣的是,全局变量似乎根本没有被修改,但仅使用主线程成功修改了它(bar 函数)。 如何写入具有不同进程的全局变量?
import multiprocessing as mp
from multiprocessing import Pool
from threading import RLock
lock = RLock()
global_counter = 0
def foo(num):
global global_counter
print(num) # prints 3,4,5
with lock:
global_counter = global_counter + 1
def bar():
global global_counter
with lock:
global_counter = global_counter + 1
if __name__ == '__main__':
p = Pool(mp.cpu_count())
list(p.map(foo, [3,4,5]))
print(global_counter) # prints 0
bar()
print(global_counter) # prints 1
【问题讨论】:
标签: python multithreading