簡體   English   中英

numpy.random.normal() 在多線程環境下

[英]numpy.random.normal() in multithreaded environment

我試圖將正態分布隨機 arrays 的生成與 numpy.random.normal() function 並行化,但看起來來自線程的調用是按順序執行的。

import numpy as np

start = time.time()

active_threads = 0
for i in range(100000):
    t = threading.Thread(target=lambda x : np.random.normal(0,2,4000), args = [0])
    t.start()

    while active_threads >= 12:
        time.sleep(0.1)
        continue

end = time.time()
print(str(end-start))

如果我測量 1 個線程進程的時間,我得到與 12 個線程進程相同的結果。 我知道這種並行化會帶來很多開銷,但即便如此,多線程版本也應該有一些時間。

np.random.normal在內部使用種子變量。 這個變量是從default_rng()檢索的,它肯定在線程之間共享,所以使用多個線程調用它是不安全的(由於可能的競爭條件)。 事實上,文檔提供了這種情況的示例(參見此處此處)。 或者,您可以使用多個進程(您需要配置種子以在不同的進程中獲得不同的結果)。 另一種解決方案是使用自定義隨機數生成器 (RNG),以便在每個線程中使用不同的 RNG object。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM