[英]Python threading TypeError too many arguments
我有以下代码试图重新创建 Reader Writer 问题(注意我还没有使用锁):
import threading
class ReadWrite:
threadList = [0] * 20
def __init__(self, origData):
self.readerLock = threading.Lock()
self.writerLock = threading.Lock()
self.data = origData
self.readerCount = 0
def acquireReadLock(self):
self.readerLock.acquire()
def releaseReadLock(self):
self.readerLock.release()
def acquireWriteLock(self):
self.writerLock.acquire()
def releaseWriteLock(self):
self.writerLock.release()
def printData(self, threadName):
print(threadName, ' printed ', self.data)
def modifyData(self, threadName, newData):
print(threadName, ' changed ', self.data, ' to ', newData)
self.data = newData
def run(self):
for x in range(20):
threadString = 'Thread' + str(x)
if x % 6:
self.threadList[x] = threading.Thread(target=self.printData, args=(threadString))
else:
newData = self.data + str(x)
self.threadList[x] = threading.Thread(target=self.modifyData, args=(threadString, newData))
self.threadList[x].start()
for x in range(20):
self.threadList[x].join()
myVar = ReadWrite('Hello')
myVar.run()
当我运行它时,出现以下错误
Exception in thread Thread-9:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
TypeError: printData() takes 2 positional arguments but 8 were given
Exception in thread Thread-10:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
TypeError: printData() takes 2 positional arguments but 8 were given
Exception in thread Thread-11:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
TypeError: printData() takes 2 positional arguments but 8 were given
我只将一个参数threadString
传递给printData
function。我想知道它从哪里获得额外的 arguments? 所有帮助将不胜感激。 我是 Python 中的多线程和线程库的新手,所以我正在做这个问题作为学习练习。
我尝试在 class 之外实现线程,并让它使用 class 实例调用 function:
threadList = [0] * 20
myVar = ReadWrite('Hello')
for x in range(20):
threadString = 'Thread' + str(x)
if x % 6:
threadList[x] = threading.Thread(target=myVar.printData, args=(threadString))
else:
newData = self.data + str(x)
threadList[x] = threading.Thread(target=myVar.modifyData, args=(threadString, newData))
threadList[x].start()
for x in range(20):
threadList[x].join()
但我得到了同样的错误。
您需要在元组中传递threadString
。 正如您所拥有的,它只是解压threadString
本身。 从以下位置更改行:
self.threadList[x] = threading.Thread(target=self.printData, args=(threadString))
到
self.threadList[x] = threading.Thread(target=self.printData, args=(threadString,))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.