gpt4 book ai didi

python - 在 Python 中使随机模块线程安全

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

我有一个应用程序需要在给定相同随机种子的情况下获得相同的结果。但我发现 random.randint 不是线程安全的。我试过 mutex 但这不起作用。这是我的实验代码(长而简单):

import threading
import random

def child(n, a):
g_mutex = threading.Lock()
g_mutex.acquire()
random.seed(n)
for i in xrange(100):
a.append(random.randint(0, 1000))
g_mutex.release()

def main():
a = []
b = []
c1 = threading.Thread(target = child, args = (10, a))
c2 = threading.Thread(target = child, args = (20, b))
c1.start()
c2.start()
c1.join()
c2.join()

c = []
d = []
c1 = threading.Thread(target = child, args = (10, c))
c2 = threading.Thread(target = child, args = (20, d))
c1.start()
c1.join()
c2.start()
c2.join()

print a == c, b == d

if __name__ == "__main__":
main()

我想编写代码打印true, true,但它有机会给出false, false。如何制作线程安全的 randint?

最佳答案

您可以为每个线程创建单独的 random.Random 实例

>>> import random
>>> local_random = random.Random()
>>> local_random.seed(1234)
>>> local_random.randint(1,1000)
967

关于python - 在 Python 中使随机模块线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10021882/

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