gpt4 book ai didi

python - python numpy数组操作+=线程安全吗?

转载 作者:太空狗 更新时间:2023-10-30 01:26:27 25 4
gpt4 key购买 nike

我如何确定这段代码是线程安全的?

import numpy as np
from threading import Thread

n_threads = 5

ones = np.ones((5, 5))
A = np.ones((5, 5))

def my_function():
global A
for i in range(250):
A += ones # is += thread safe ?

threads = [Thread(target=my_function) for i in range(n_threads)]

for t in threads:
t.start()

for t in threads:
t.join()

print(A)

A 应该是关键共享内存吗?令人惊讶的是,我总是得到相同的结果,并且数组的所有条目都具有相同的值。我希望线程更新矩阵的值,并且一些会丢失......

谢谢。

最佳答案

您的代码不安全。某些 NumPy ufunc(如您隐式使用的 add())可以释放 GIL。您从未在玩具示例中看到任何问题的原因可能是它运行的时间很短并且数据量非常小。您可能还通过简单的计算来避免问题,但我想您的实际代码会更复杂。

简而言之,你不能在没有锁定的情况下在多线程中做你正在做的事情。对于这样的代码,锁定可能会破坏多线程的目的。

关于python - python numpy数组操作+=线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46028577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com