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

2024-05-15 15:30:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个应用程序要求相同的结果给定相同的随机种子。但我发现random.randint不是线程安全的。我试过互斥,但这不起作用。这是我的实验代码(长但简单):

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?


Tags: 代码childtargetmainargsrandom线程thread