Создайте Python-скрипт, который проверяет доступность указанного веб-сервера и отправляет уведомление на почту, если сервер недоступен. Скрипт должен выполнять проверку каждые 5 минут и отправлять уведомление только один раз, если сервер падает, а затем повторно — только когда сервер снова станет доступен.
•
python monitor.py https://example.com
— проверяет доступность сервера по адресу https://example.com
, отправляет уведомление на почту, если сервер перестаёт отвечать, и повторно уведомляет при восстановлении работы.Решение задачи
import requests
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import sys
# Настройки для отправки уведомлений
SMTP_SERVER = 'smtp.example.com '
SMTP_PORT = 587
EMAIL = 'your-email@example.com '
PASSWORD = 'your-password'
TO_EMAIL = 'recipient@example.com '
# Функция для отправки уведомления
def send_notification(subject, message):
msg = MIMEMultipart()
msg['From'] = EMAIL
msg['To'] = TO_EMAIL
msg['Subject'] = subject
msg.attach(MIMEText(message, 'plain'))
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls()
server.login(EMAIL, PASSWORD)
server.sendmail(EMAIL, TO_EMAIL, msg.as_string())
print(f"Уведомление отправлено: {subject}")
# Функция для проверки доступности сервера
def check_server(url):
try:
response = requests.get(url, timeout=5)
return response.status_code == 200
except requests.RequestException:
return False
# Основная функция мониторинга
def monitor(url):
server_is_down = False
while True:
is_up = check_server(url)
if is_up and server_is_down:
send_notification("Сервер восстановлен", f"Сервер {url} снова доступен.")
server_is_down = False
elif not is_up and not server_is_down:
send_notification("Сервер недоступен", f"Сервер {url} перестал отвечать.")
server_is_down = True
time.sleep(300) # Проверка каждые 5 минут
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Укажите URL сервера для мониторинга.")
sys.exit(1)
url = sys.argv[1]
monitor(url)
Please open Telegram to view this post
VIEW IN TELEGRAM
Full-stack Python разработчик Junior/Junior+
Junior Python разработчик
Junior Python разработчик
Please open Telegram to view this post
VIEW IN TELEGRAM
Эта статья написана для новичков, которые только начинают осваивать структуры данных на Python. Сегодня мы рассмотрим замечательную и очень полезную структуру — двусвязный список.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
В Python менеджеры контекста используются для управления ресурсами, такими как файлы или сетевые соединения, автоматически освобождая их после использования. Они реализуются с помощью методов
__enter__
и __exit__
.with open('file.txt', 'r') as file:
content = file.read()
Здесь файл автоматически закроется после завершения блока
with
, даже если внутри него возникнет ошибка.🗣️ Менеджеры контекста полезны для автоматического управления ресурсами и обработки исключений.
Please open Telegram to view this post
VIEW IN TELEGRAM
Python разработчик (офис)
•
Python, FastAPI, aiohttp, polars, Spark, Jupyter, ElasticSearch, PostgreSQL, Redis, RabbitMQ, Kubernetes, GitLab CI•
от 150 000 до 250 000 ₽ | от 1 года опытаИнженер по автоматизации (Python)
•
Python, SQL, Docker, Kubernetes•
Уровень дохода не указан | от 1 года опытаMiddle Python developer
•
Python, SQL, Firebird, Apache2, Nginx, REST API, JSON-RPC, Git•
Уровень дохода не указан | от 1 года опытаPlease open Telegram to view this post
VIEW IN TELEGRAM
В статье рассказывается о личном опыте создания проекта в программировании. Это не инструкция или руководство, а просто история новичка, который делится своей идеей, потому что подобного проекта он не нашел в сети.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Создайте Python-приложение, которое принимает строку и определяет частоту встречаемости каждого символа в этой строке. Программа должна выводить результаты в консоль и сохранять их в файл
char_count.json
.•
python app.py count "Hello, World!"
— выводит количество каждого символа и сохраняет в char_count.json
.Решение задачи
import json
import sys
from collections import Counter
def count_chars(text):
count = Counter(text)
print(count)
with open('char_count.json', 'w') as f:
json.dump(count, f)
if __name__ == "__main__":
if len(sys.argv) > 1:
count_chars(sys.argv[1])
else:
print("Укажите строку для подсчета символов.")
Please open Telegram to view this post
VIEW IN TELEGRAM
Хочешь полностью контролировать свои Docker-образы? Мы расскажем, как создать и настроить личный реестр контейнеров, идеально подходящий для твоих задач.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Поговорим о создании пайплайна для обучения нейросетей, сражающихся на арене. Узнайте, как шаг за шагом построить процесс, и попробуйте обучить собственного чемпиона. Подробности и код на GitHub!
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
DevOps-инженер
•
CI/CD, Docker, Jenkins, KVM, Kubernetes, Ansible, Bash, Python, GitLab, Grafana•
от 300 000 до 350 000 ₽ | от 3 лет опытаPython разработчик
•
Python, Docker, Kubernetes, SQLAlchemy, PyQt6, lxml, pytest•
Уровень дохода не указан | от 5 лет опытаSenior Python developer (ServiceController)
•
Python, FastAPI, PostgreSQL, SQLAlchemy, Kafka, Docker, Kubernetes•
Уровень дохода не указан | от 3 лет опытаPlease open Telegram to view this post
VIEW IN TELEGRAM
Статья объясняет концепцию символьных и жёстких ссылок на файлы, акцентируя внимание на hard links в Windows, малоизвестных многим веб-разработчикам. В простых примерах раскрывается принцип работы ссылок и их отличия от привычных ярлыков.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Генераторные выражения — это компактный способ создания итераторов в Python. Они похожи на списковые выражения (list comprehensions), но возвращают по одному элементу за раз, а не создают сразу весь список. Это делает их более эффективными по памяти, особенно для обработки больших объемов данных.
# Списковое выражение — создает весь список в памяти
squared_list = [x**2 for x in range(10)]
print(squared_list) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# Генераторное выражение — возвращает по одному значению
squared_gen = (x**2 for x in range(10))
print(next(squared_gen)) # 0
print(next(squared_gen)) # 1
🗣 Генераторные выражения экономят память и могут использоваться для последовательной обработки данных, где полный список не нужен.
Please open Telegram to view this post
VIEW IN TELEGRAM
Статья объясняет использование функции scatterplot() из seaborn для визуализации взаимосвязи числовых переменных. Рассказывается о параметрах настройки цвета, размера и стиля точек, что помогает в многомерном анализе данных.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Статья о создании бота для автоматизации ленты сообщений в Telegram. Как с помощью Cursor AI от Claude реализовать категории через папки и упростить управление новыми каналами.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Задачи сделаны, функционал работает, но когда пользователь берёт продукт в руки, начинаются жалобы.
Please open Telegram to view this post
VIEW IN TELEGRAM
Senior Python Developer (релокация на Кипр, Лимасол)
Senior QA Engineer (Mobile)
Data Analyst Team Lead
Please open Telegram to view this post
VIEW IN TELEGRAM
Статья демонстрирует, как с помощью Python и библиотек Flet и FastAPI создавать кроссплатформенные приложения. Рассматриваются подходы к разработке веб, мобильных и десктопных решений без необходимости изучать другие языки.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
• Pygame для начинающих программистов. Статья первая
• Автоматизированное тестирование API с использованием Python. Работа с JSON и JsonPath
• Состояние производительности Python 3.13: Free-Threading
• Переосмысление концепции подсчета ссылок и полный отказ от сборщика мусора
• Не бойтесь потоков в Python, они не кусаются
Please open Telegram to view this post
VIEW IN TELEGRAM
Напишите скрипт, который проверяет, существует ли указанный файл, и выводит сообщение
Файл найден
или Файл не найден
.python check_file.py example.txt
Файл найден
Решение задачи
import os
import sys
if len(sys.argv) < 2:
print("Использование: python check_file.py <file_path>")
sys.exit(1)
file_path = sys.argv[1]
if os.path.isfile(file_path):
print("Файл найден")
else:
print("Файл не найден")
Please open Telegram to view this post
VIEW IN TELEGRAM
В этой статье я даю краткий обзор: в основном это структура данных вида key: value, содержащая примитивные типы данных, такие как строка, логическое значение, числа, а также массивы. JSON очень похож на словарь в Python.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM