#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%, что он работает, но попробовать стоит.