Как вызвать несколько методов в классе при использовании многопоточности - PullRequest
0 голосов
/ 12 апреля 2020

Итак, я новичок в Python и изучаю многопоточность. Я посмотрел видео о том, как это сделать, и последовал. Я получил это:

from threading import *

from time import sleep

class Hello(Thread):

    def run(self):
        for i in range(5):
            print("Hello")
            sleep(1)

class Hi(Thread):

    def run(self):
        for i in range(5):
            print("Hi")
            sleep(1)

t1 = Hello()

t2 = Hi()

t1.start()

sleep(0.2)

t2.start()

Который печатает Hello и Hi одновременно. Но я запутался по поводу запуска, используемого в t1.start () и t2.start (), потому что классы Hello и Hi не имеют метода start. Что если у меня есть разные методы с разными именами, как я могу их вызвать? Заранее спасибо!

1 Ответ

0 голосов
/ 12 апреля 2020

Пара точек:

(1) Hello экземпляр - это Thread экземпляр. Вы написали, class Hello(Thread): .... Это объявляет ваш Hello класс специализацией Thread класса. Ваш Hello объект имеет метод start(), поскольку класс Thread имеет метод start().

(2) Экземпляр Thread не является потоком . thread - это объект операционной системы. Экземпляр Thread - это «дескриптор», который ваша программа использует для создания и взаимодействия с операционной системой thread . Вызов t1.start() - это то место, где создается новый поток .

(3) После создания нового потока с помощью t1.start() он вызовет t1.run(). Это высечено в камне. Вы не можете это изменить, НО ...

(4) ... Вы сами пишете метод run(). Это будет делать все, что вы заставляете это делать. Если вы хотите, чтобы поток вызывал какой-то метод self.foobar(), то все, что вам нужно сделать, это поместить вызов self.foobar() в ваш метод run().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...