使用list在python中进行线程化

时间:2017-09-08 15:53:45

标签: python multithreading

我一直在尝试使用列表来存储每个线程的所有返回值。线程函数返回三个连续数字的列表。 rt_list必须是列表列表,其中每个项目是每个线程的输出列表。

from threading import Thread


def thread_func(rt_dict, number = None):
    if not(number):
        print("Number not defined.Please check the program invocation. The program will exit.")        
        sys.exit()
    else:

        rt_dict[number] = [number,number+1, number+2] 
    return



numbers = [1,2,3,4,5,6]
rt_list = []
thread_list = [Thread(target=thread_func, args=(rt_list),kwargs={'number':num})for num in numbers]
for thread in thread_list:
     thread.start()
for thread in thread_list:
     thread.join()
print(rt_list) 

这是我尝试运行上述程序时遇到的错误

 Exception in thread Thread-6:
 Traceback (most recent call last):
 File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
   self.run()
 File "/usr/lib/python3.5/threading.py", line 862, in run
   self._target(*self._args, **self._kwargs)
 TypeError: thread_func() missing 1 required positional argument: 'rt_dict'

1 个答案:

答案 0 :(得分:1)

args=(rt_list)实际上并未作为元组传递,即使您拥有()。你需要传递args=(rt_list,)才能使它成为一个元组,Thread的构造函数需要它。

但是,目前还不清楚你要做什么,因为你创建了一个列表并将其传递给Thread的构造函数,但是thread_func的arg被称为rt_dict ,您可以像dict一样访问它。你想要一份清单清单还是一份清单?

在任何情况下,您可能都希望写入一个线程安全的数据结构。有关这方面的一个很好的例子,请参见here