我有一個應用程序在給定相同的隨機種子時需要相同的結果。但是我發現random.randint不是線程安全的。我試過互斥體,但這不起作用。這裏是我的實驗代碼(長,但簡單):在Python中使隨機模塊線程安全
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()
我希望將代碼打印真實,真實,但它代表一個機會給假的,假的。我如何製作線程安全的randint?
不敢相信我沒注意到。如果你持有一個全局鎖,那不是線程中有太多要點。 – 2012-04-05 02:37:04