Как я могу вызвать поток несколько раз в Python?

Извините, если это глупый вопрос. Я пытаюсь использовать несколько классов многопоточности для завершения разных заданий, что предполагает многократное использование этих многопотоков в разное время. Но я не уверен, какой метод использовать. Код выглядит так:

class workers1(Thread): def __init__(self): Thread.__init__(self) def run(self): do some stuff class workers2(Thread): def __init__(self): Thread.__init__(self) def run(self): do some stuff class workers3(Thread): def __init__(self): Thread.__init__(self) def run(self): do some stuff WorkerList1=[workers1(i) for i in range(X)] WorkerList2=[workers2(i) for i in range(XX)] WorkerList2=[workers3(i) for i in range(XXX)] while True: for thread in WorkerList1: thread.run (start? join? or?) for thread in WorkerList2: thread.run (start? join? or?) for thread in WorkerList3: thread.run (start? join? or?) do sth . 

Я пытаюсь, чтобы все потоки во всем WorkerList начали работать в одно и то же время или, по крайней мере, начинались примерно в одно и то же время. Когда-то однажды все они были прекращены, я хотел бы снова вызвать все потоки.

  • Переопределение потоков python.Thread.run ()
  • «Невозможно запустить новую ошибку потока» в Python
  • Выполнять несколько потоков одновременно
  • python: как завершить поток при завершении основной программы
  • Изменяет переменную класса в python threadsafe?
  • Потоки Python. Как заблокировать поток?
  • Если бы не было цикла, я мог бы просто использовать .start; но так как я могу только начать нить один раз, начинать, по-видимому, не подходит здесь. Если я использую run, кажется, что все потоки начинаются последовательно, а не только потоки в одном списке, но также потоки из разных списков.

    Кто-нибудь может помочь?

  • Windows не передает аргументы командной строки программам Python, выполняемым из оболочки
  • Прозрачный фон в окне Tkinter
  • Импортируйте несколько файлов excel в pandon pandas и объедините их в один фрейм данных
  • Как я могу привести к сбою Python 3.5?
  • eval импортировать модуль
  • конвертировать полный панда данных в целые числа в пандах (0.17.0)
  • 2 Solutions collect form web for “Как я могу вызвать поток несколько раз в Python?”

    здесь есть много заблуждений:

    • вы можете только один раз запустить конкретный экземпляр потока. но в вашем случае цикл for зацикливается на разных экземплярах потока, каждый экземпляр присваивается переменному thread в цикле, поэтому нет никакой проблемы при вызове метода start() по каждому потоку. (вы можете думать об этом, как если бы переменный thread был псевдонимом объекта Thread() созданного в вашем списке)

    • run() не совпадает с join() : call run() выполняет так, как если бы вы программировали последовательно. метод run() не запускает новый поток, он просто выполняет инструкции in в методе, как и для любого другого вызова функции.

    • join() не запускает ничего: он только ждет завершения потока. для того, чтобы join() работал правильно для потока, вы должны start() вызвать start() в этом потоке.

    кроме того, вам не следует, чтобы вы не могли перезапустить поток после его завершения: вам нужно воссоздать объект потока для его повторного запуска. одним из способов решения этой задачи является вызов Thread.__init__() в конце метода run() . однако я бы не рекомендовал это делать, так как это запретит использование метода join() для обнаружения конца выполнения потока.

    Если вы thread.start() в циклах, вы фактически начнете каждый поток только один раз, потому что все записи в вашем списке являются отдельными объектами потока (неважно, что они принадлежат к одному классу). Вы никогда не должны вызывать метод run() потока напрямую – он должен быть вызван методом start() . Вызов его напрямую не будет вызывать его в отдельном потоке.

    Python - лучший язык программирования в мире.