У меня есть модуль, который импортирует потоки и использует threading.activeCount(), чтобы определить, когда все потоки выполнены. Я изначально написал свой модуль, используя стандартный интерпретатор python. Использование моего модуля в скрипте прекрасно, однако при импорте моего модуля в ipython и вызове функции, которая зависит от threading.activeCount(). Моя функция никогда не возвращается.python и ipython threading.activeCount()
Код:
for dev in run_list:
proc = threading.Thread(target=go, args=[dev])
proc.start()
while threading.activeCount() > 1:
time.sleep(1)
Я заметил, что при первом импорте нарезания резьбы со стандартным интерпретатором и вызов threading.activeCount(), только один поток отсчитывается:
>>> import threading
>>> threading.activeCount()
1
>>> threading.enumerate()
[<_MainThread(MainThread, started 140344324941568)>]
Однако при использовании IPython , начальный счет 2:
In [1]: import threading
In [2]: threading.activeCount()
Out[2]: 2
In [3]: threading.enumerate()
Out[3]:
[<_MainThread(MainThread, started 140674997614336)>,
<HistorySavingThread(Thread-1, started 140674935068416)>]
Этот модуль используется различными организациями используя различные интерпретаторы для работы, так что мне интересно, есть ли лучший способ справиться с этим (желательно, все еще используя потоки)?
Отлично, спасибо за ответ! – siesta
Как мне проверить, завершены ли все потоки в def main? Прямо сейчас у меня есть цикл While, пока ActiveCount == 0 Как я могу проверить это с помощью соединения? – Steelzeh
Присоединение @Steelzeh ждет завершения резьбы. После присоединения вы знаете, что поток завершен, не проверив другого пути. –