我正在嘗試使用 oops 實作多執行緒
class test:
def printer(self):
for ctr in range(1000000):
print("hello")
def printHi(self):
for ctr in range(1000000):
print("hi")
if __name__ == "__main__":
test1 = test()
t1 = threading.Thread(target=test1.printHi, args=(10,))
t2 = threading.Thread(target=test1.printer, args=(10,))
t1.start()
t2.start()
print("Done!")
但是 test1.printHi 期望我通過 self
Exception in thread Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python3.9/threading.py", line 973, in _bootstrap_inner
Thread-2:
Traceback (most recent call last):
File "/usr/lib/python3.9/threading.py", line 973, in _bootstrap_inner
self.run()
File "/usr/lib/python3.9/threading.py", line 910, in run
self.run()
File "/usr/lib/python3.9/threading.py", line 910, in run
self._target(*self._args, **self._kwargs) self._target(*self._args, **self._kwargs)
TypeError: printHi() takes 1 positional argument but 2 were givenTypeError:
printer() takes 1 positional argument but 2 were given
Done!
通過 self 后,它不再是多執行緒的了
t1 = threading.Thread(target=test1.printHi())
t2 = threading.Thread(target=test1.printer())
t1.start()
print("next")
t2.start()
它首先列印 all hi ,然后 hello 最后列印出來,但是當我像函式一樣實作它們時,它們會立即列印出來。正確實作它的正確方法是什么,以便兩個執行緒同時運行......
uj5u.com熱心網友回復:
您似乎將額外的 10 傳遞給方法;嘗試:
class test:
def printer(self):
for ctr in range(10):
print("hello")
time.sleep(1)
def printHi(self):
for ctr in range(10):
print("hi")
time.sleep(1)
if __name__ == "__main__":
test1 = test()
t1 = threading.Thread(target=test1.printHi, args=())
t2 = threading.Thread(target=test1.printer, args=())
t1.start()
t2.start()
print("Done!")
或者,如果你想保留引數,函式需要接受它:
class test:
def printer(self, n):
for ctr in range(10):
print("hello", n)
time.sleep(1)
def printHi(self, n):
for ctr in range(10):
print("hi", n)
time.sleep(1)
if __name__ == "__main__":
test1 = test()
t1 = threading.Thread(target=test1.printHi, args=(10,))
t2 = threading.Thread(target=test1.printer, args=(10,))
t1.start()
t2.start()
print("Done!")
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/392613.html
標籤:Python 多线程 python-多线程
