Я использую threading
в python, чтобы динамически генерировать несколько потоков. Это как я нерест нити:как ждать динамического запуска нескольких потоков в python до конца
def func(max_val):
for val in range(0,max_val):
thread1 = threading.Thread(target=func9, args=(val,))
thread1.start()
print 'Ended all threads' #this should get printed once all the threads have ended
# bunch of other code after this
.
.
.
if __name__ == '__main__':
ret = func()
То, что я хочу, что когда-то все нити были порождал то процесс должен ждать, пока все нити закончились, а затем приступить к следующей строке кода. Я знаю, что мы используем thread1.join()
, чтобы дождаться потока, но если я поместил его внутри цикла for
, он будет ждать окончания 1-го потока до того, как будет создан следующий поток. Я не хочу, чтобы он дождался окончания одного потока до начала следующего потока. Он должен порождать все потоки одновременно, а затем ждать, пока все они закончится до выполнения следующей строки кода (например, print
в func()
выше должен быть выполнен после завершения всех потоков).
Как это сделать?
Вы не должны проверять если 'thread' является« текущей нитью », чтобы избежать ситуации« тупика »? –
@ KhalilAmmour- خليلعمور, о каком тупике вы упоминаете? –
Из Python Docs: > join() вызывает RuntimeError, если делается попытка присоединиться к текущему потоку, так как это вызовет тупик. –