Пропингуйте 500 устройств на Python и сохраните их информацию об ответах в БД

#python #concurrency #ping

Вопрос:

Мой вопрос может показаться глупым, но у меня есть проблема, которую нужно решить: мне нужно пинговать 500 устройств с помощью python каждые X секунд, получать время пинга, вычислять минимальное/максимальное/среднее значение и сохранять эти значения в БД, которая будет постоянно обновляться новыми данными пинга.

В базе данных будет больше строк, чем у пропущенных устройств.

В общем, я должен сделать что-то, что будет очень похоже на копчение, но на python.

Для этого я начал изучать fping, и это кажется наиболее логичным способом сделать это, но я не уверен в этом.

В настоящее время я ищу несколько советов о том, как я могу решить эту проблему, не слишком напрягая свой процессор и всю виртуальную машину.

Ребята, у вас есть какие-нибудь советы?

Комментарии:

1. Здесь, в Stack Overflow, мы не даем «некоторых советов». Пожалуйста, задайте более конкретный вопрос!

Ответ №1:

Ну, может показаться немного глупым, но если вы работаете в Windows, вы можете использовать подпроцесс:

 import os
import subprocess
import random
from threading import Thread

    
adresses = ["list of ips"]
def ping(ip)
        systeminfo = subprocess.Popen("ping {}".format(ip),stdout=subprocess.PIPE,shell=True, universal_newlines=True)
        out, err = systeminfo.communicate()
        with open("database.db", "w") as database:
             database.write(out)
             database.close()
# Start all threads. 
threads = []
for n in range(500):
    t = Thread(target=ping, args=([ip for ip in adresses],))
    t.start()
    threads.append(t)

# Wait all threads to finish.
for t in threads:
    t.join()
 

Попробуйте этот код, я не уверен на 100%, что он работает, но попробовать стоит.