запускаем 1000 потоков на проверку первых пятиста портов, выводим на экран номера тех, к которым удалось подключиться.
Собственно, вопрос: почему, если написать while threading.active_count() > 0: – программа не завершается?
Т.е. подразумевается что 2 потока всегда остаются запущенны.
Я где-то читал что как раз 2 потока всегда работают - это главный код и среда исполнения, в которой он выполняется (как-то так, извините за ламоразмы). Но в данном случае используется threading, который вроде как породил 1000 дополнительных потоков, из которых 2 никак не завершаются.
Просветите пожалуйста.
def threadMain():
global queue
while True:
try:
task = queue.get_nowait()
except:
return 0
process(task)
def process(port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(0.01)
try:
sock.connect(('localhost', port))
except:
return 0
print('opened:', port)
sock.close()
# main
queue = queue.Queue()
for i in range(500):
queue.put(i)
for test in range(1000):
new_thread = threading.Thread(target=threadMain)
new_thread.start()
while threading.active_count() > 2:
pass
print('done')