2017-06-05 47 views
-1

为了更好地了解线程概念,我尝试在一个简单的程序中使用线程。我想调用一个函数3次,它随机选择。
如何从不同的线程获得不同的答案?

def func(arg): 
    lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] 
    num = random.choice(lst) 
    arg.append(num) 
    return arg 


def search(arg): 
    a = func(arg) 
    a = func(a) 
    threads_list = [] 
    que = queue.Queue() 
    for i in range(3): 
     t = threading.Thread(target=lambda q, arg1: q.put(func(arg1)), args=(que, a)) 
     t.start() 
     threads_list.append(t) 

    for t in threads_list: 
     t.join() 
    while not que.empty(): 
     result = que.get() 
     print (result) 

if __name__ == '__main__': 
    lst = [] 
    search(lst) 

正如你可以看到在第三部分中,我使用的线程,但我希望得到不同的列表(第三部分不同)。 但所有线程返回相同的答案。
任何人都可以帮助我从不同的线程获得不同的列表吗?
我想我误解了多处理和多线程的概念。

回答

0

可能地,random.choice正在使用的伪随机数发生器使用三个实例 - 每个线程一个 - 并且在没有唯一的种子时将产生相同的伪随机序列。由于没有提供种子,它可能使用系统时间,这取决于精度,可能对所有三个线程都是相同的。

您可能尝试在调用PRNG的线程内尝试使用与线程不同的内容进行PRNG播种。这应该会导致三个线程使用不同的种子,并给你不同的伪随机序列。

+0

你可以把你的想法付诸实践并修复代码吗? –

相关问题