【发布时间】:2012-04-05 02:26:44
【问题描述】:
我有一个应用程序需要在给定相同随机种子的情况下获得相同的结果。但我发现 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?
【问题讨论】:
标签: python random thread-safety