python 中对象方法的多线程
Multithreading on object methods in python
我正在尝试使用 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希望我通过自我
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()
它首先打印所有 hi,然后 hello at last next 正在打印,但是当我像函数一样实现它们时,它正常工作,它们会立即组合打印。正确实现它的正确方法是什么,以便两个线程同时运行...
您似乎将额外的 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!")
我正在尝试使用 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希望我通过自我
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()
它首先打印所有 hi,然后 hello at last next 正在打印,但是当我像函数一样实现它们时,它正常工作,它们会立即组合打印。正确实现它的正确方法是什么,以便两个线程同时运行...
您似乎将额外的 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!")