多线程中调用start方法为什么会运行run方法
时间: 2024-05-20 14:17:18 浏览: 16
在多线程中,调用start方法会启动一个新线程,并自动调用该线程的run方法。这是由于start方法内部会创建一个新的线程,并将该线程的run方法作为该线程的入口点。因此,只有通过调用start方法才能启动一个新线程并运行其run方法。如果直接调用run方法,则不会启动新线程,而是在当前线程中直接调用该方法。
相关问题
调用线程对象的start 方法会执行run 方法 为什么不能直接调用run 方法
调用线程对象的start方法会启动一个新的线程来执行run方法中的代码,而直接调用run方法只会在当前线程中执行run方法中的代码,不会创建新的线程。如果直接调用run方法,就失去了多线程的优势,不能同时执行多个任务,影响程序的性能。因此,需要调用start方法来启动新的线程,让程序能够充分利用多核处理器的优势,提高并发度和吞吐量。
pyqt5多线程中run()方法中调用外部类怎么写
在PyQt5多线程中,如果想要在run()方法中调用外部类,可以通过以下步骤实现:
首先,创建一个继承自QThread的子类,在子类中重写run()方法。
接着,在子类中定义一个外部类的实例,并在run()方法中调用外部类的方法或属性。
最后,在主程序中实例化子类,并调用start()方法启动多线程运行。
下面是一个简单的示例代码:
```python
from PyQt5.QtCore import QThread
# 外部类
class MyClass:
def __init__(self):
pass
def my_method(self):
print("外部类中的方法被调用")
# 子类
class MyThread(QThread):
def __init__(self):
super().__init__()
self.my_class = MyClass() # 实例化外部类
def run(self):
self.my_class.my_method() # 在run()方法中调用外部类的方法
# 主程序
if __name__ == '__main__':
my_thread = MyThread() # 实例化子类
my_thread.start() # 启动多线程
```
在这个示例中,子类MyThread继承自QThread,并在run()方法中实例化了外部类MyClass,并调用了外部类的方法my_method()。
通过以上方法,就可以在PyQt5多线程中的run()方法中调用外部类的方法或属性。