我编写了以下代码(简化),将对象添加到最初为空的列表(listOfElements,这是一个全局变量)。然而,当我最后打印这个列表时,它仍然是空的。我做错了什么?
import threading
def addElement(listOfElements):
for k in range(10):
listOfElements.append(k)
listOfElements = []
import threading
def addElement(listOfElements,otherList):
for k in range(10):
listOfElements.append(k)
listOfElements = []
threadsElts = []
for i in range(10):
threadsElts.append(threading.Thread(target=addElement,args=(listOfElements,otherList)))
for t in threadsElts:
t.start()
for t in threadsElts:
t.join()
threadsElts = []
for i in range(10):
threadsElts.append(threading.Thread(target=addElement,args=(listOfElements,otherList)))
for t in threadsElts:
t.start()
for t in threadsElts:
t.join()
答案 0 :(得分:2)
问题在于代码。使用您的代码,我收到此错误: -
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/local/akamai/lib/python2.7/threading.py", line 551, in __bootstrap_inner
File "/usr/local/akamai/lib/python2.7/threading.py", line 504, in run
TypeError: addElement() takes exactly 1 argument (0 given)
Exception in thread Thread-2:
Traceback (most recent call last):
File "/usr/local/akamai/lib/python2.7/threading.py", line 551, in __bootstrap_inner
File "/usr/local/akamai/lib/python2.7/threading.py", line 504, in run
TypeError: addElement() takes exactly 1 argument (0 given)
Exception in thread Thread-3:
Traceback (most recent call last):
File "/usr/local/akamai/lib/python2.7/threading.py", line 551, in __bootstrap_inner
File "/usr/local/akamai/lib/python2.7/threading.py", line 504, in run
TypeError: addElement() takes exactly 1 argument (0 given)
Exception in thread Thread-4:
Traceback (most recent call last):
File "/usr/local/akamai/lib/python2.7/threading.py", line 551, in __bootstrap_inner
File "/usr/local/akamai/lib/python2.7/threading.py", line 504, in run
TypeError: addElement() takes exactly 1 argument (0 given)
Exception in thread Thread-5:
Traceback (most recent call last):
File "/usr/local/akamai/lib/python2.7/threading.py", line 551, in __bootstrap_inner
File "/usr/local/akamai/lib/python2.7/threading.py", line 504, in run
TypeError: addElement() takes exactly 1 argument (0 given)
Exception in thread Thread-6:
Traceback (most recent call last):
File "/usr/local/akamai/lib/python2.7/threading.py", line 551, in __bootstrap_inner
File "/usr/local/akamai/lib/python2.7/threading.py", line 504, in run
TypeError: addElement() takes exactly 1 argument (0 given)
Exception in thread Thread-7:
Traceback (most recent call last):
File "/usr/local/akamai/lib/python2.7/threading.py", line 551, in __bootstrap_inner
File "/usr/local/akamai/lib/python2.7/threading.py", line 504, in run
TypeError: addElement() takes exactly 1 argument (0 given)
Exception in thread Thread-8:
Traceback (most recent call last):
File "/usr/local/akamai/lib/python2.7/threading.py", line 551, in __bootstrap_inner
File "/usr/local/akamai/lib/python2.7/threading.py", line 504, in run
TypeError: addElement() takes exactly 1 argument (0 given)
Exception in thread Thread-9:
Traceback (most recent call last):
File "/usr/local/akamai/lib/python2.7/threading.py", line 551, in __bootstrap_inner
File "/usr/local/akamai/lib/python2.7/threading.py", line 504, in run
TypeError: addElement() takes exactly 1 argument (0 given)
Exception in thread Thread-10:
Traceback (most recent call last):
File "/usr/local/akamai/lib/python2.7/threading.py", line 551, in __bootstrap_inner
File "/usr/local/akamai/lib/python2.7/threading.py", line 504, in run
TypeError: addElement() takes exactly 1 argument (0 given)
如果你像这样传递listOfElements
,可以解决这个问题: -
threadsElts.append(threading.Thread(target=addElement,args=(listOfElements,)))
进行上述更改后代码运行正常。
另外,请记住,您正在修改变量而不进行任何锁定,因此您的代码可能会损坏您的数据。您可能需要浏览此链接:http://effbot.org/zone/thread-synchronization.htm以便更好地了解问题
答案 1 :(得分:1)
您的问题很简单,TypeError: addElement() takes exactly 1 argument (0 given)
。
它告诉我们你的问题是函数的参数,而你的参数是在线程args=(listOfElements)
中给出的,它看起来不错,但语法错误。
在python中,元组很特殊,看看这个:
a = () # a has no element
a = (1) # error
a = (1,) # yes, a has one element, the dot cannot be missing, special
a = (1,2) # yes, a has two
你可以尝试一下。