Как завершить потоки через определенное время?Python

Программы на Python
Ответить
Anonymous
 Как завершить потоки через определенное время?

Сообщение Anonymous »

У меня есть скрипт Python, который просто запускает потоки для прослушивания некоторых портов на локальном хосте.

Код: Выделить всё

#!/usr/bin/python3

import socket
import threading
import concurrent.futures

threads = []

def listen_on_port(port):
HOST = ''                 # Symbolic name meaning all available interfaces
PORT = int(port)          # Arbitrary non-privileged port
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print(addr,conn)

def main(ports):
with concurrent.futures.ThreadPoolExecutor() as executor:
for port in ports:
executor.submit(listen_on_port,port)

if __name__ == '__main__':
main(ports=[50010,50020,50030])
Когда я запускаю этот сценарий, он прослушивает порты, как и ожидалось. Я использую этот сценарий, чтобы проверить, разрешают ли правила брандмауэра соединения через эти порты. А в другой системе я запускаю nc -zv my-host 50010, и поток, прослушивающий порт 50010, завершается, и это то, чего я хочу.
Но я хотел бы сделать два улучшения: 1) заставить потоки умирать через X секунд, 2) запускать потоки в фоновом режиме, как демоны, чтобы мой сценарий завершился и оставил потоки работающими.
Что я могу попробовать следующий?

Подробнее здесь: https://stackoverflow.com/questions/714 ... nt-of-time
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»