Pro Python
1.29K subscribers
85 photos
20 files
102 links
Канал создан, чтобы заинтересовать вас языками программирования.

@ - связь, реклама
Download Telegram
Потоки и процессы

В современном компьютерном мире понятия потоков (threads) и процессов (processes) играют ключевую роль в обеспечении многозадачности и эффективного использования ресурсов системы.

Процессы

Процесс - это экземпляр программы, который выполняется на компьютере. Каждый процесс имеет своё собственное пространство памяти, системные ресурсы и данные. Процессы создаются операционной системой и могут быть запущены пользователем или другой программой.

Ключевые характеристики процессов:

🔤 Изоляция памяти: Каждый процесс работает в своем собственном адресном пространстве. Это означает, что данные одного процесса не могут быть напрямую доступны или изменены другим процессом.

🔤 Ресурсы: Процессы имеют свои собственные дескрипторы файлов, системные ресурсы и окружение.

🔤 Безопасность: Изоляция памяти обеспечивает безопасность данных между процессами, предотвращая случайное или намеренное изменение данных другими процессами.
Создание и управление: Создание нового процесса (форк) занимает больше времени и ресурсов, так как операционная система должна выделить память и ресурсы для нового процесса.

Потоки

Поток (или нить) - это наименьшая единица обработки, которая выполняется в пределах процесса. Потоки позволяют параллельно выполнять несколько задач внутри одного процесса, что увеличивает эффективность использования ресурсов процессора.

Ключевые характеристики потоков:

🔤 Общее адресное пространство: Все потоки в одном процессе разделяют одно и то же адресное пространство и ресурсы, такие как дескрипторы файлов и системные данные.

🔤 Легковесность: Создание и управление потоками менее ресурсоёмко по сравнению с процессами. Потоки могут быстро переключаться, что делает их идеальными для выполнения параллельных задач.

🔤 Синхронизация: Поскольку потоки разделяют общее адресное пространство, они могут легко обмениваться данными, но это требует механизмов синхронизации (например, мьютексов или семафоров) для предотвращения конфликтов при одновременном доступе к общим ресурсам.

🔤 Производительность: Потоки позволяют использовать возможности многоядерных процессоров, выполняя задачи параллельно и улучшая общую производительность системы.

🛩Pro Python. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Кортежи в pattern matching

В качестве шаблонов в pathern matching в Python могут выступать кортежи. Эти примеры показывают, как можно использовать pattern matching для работы с кортежами в Python. С помощью этой функциональности можно значительно упростить обработку различных структур данных.

🛩Pro Python. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
✈️Все типы апдейтов в Telegram Bot API

🛩Pro Python. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Все типы данных в PostgreSQL

PostgreSQL — это мощная реляционная база данных с широкими возможностями, включая поддержку различных типов данных. Давайте рассмотрим основные типы данных, которые доступны в PostgreSQL.

1. Числовые типы
- INTEGER: Целые числа (4 байта). Диапазон: от -2,147,483,648 до 2,147,483,647.
- BIGINT: Большие целые числа (8 байт). Диапазон: от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807.
- SMALLINT: Малые целые числа (2 байта). Диапазон: от -32,768 до 32,767.
- DECIMAL или NUMERIC: Числа с фиксированной точкой. Полезно для финансовых данных. Формат: DECIMAL(10, 2).
- FLOAT: Числа с плавающей точкой (4 байта). Может быть представлен как FLOAT4 или FLOAT8.
- REAL: Числа с плавающей точкой одинарной точности (4 байта).
- DOUBLE PRECISION: Числа с плавающей точкой двойной точности (8 байт).

2. Символьные типы
- CHAR(n): Фиксированная длина строк (n символов).
- VARCHAR(n): Переменная длина строк (максимум n символов).
- TEXT: Не ограниченная длина строк. Полезно для хранения больших текстов.

3. Булевый тип
- BOOLEAN: Логические значения (TRUE, FALSE, NULL).

4. Дата и время
- DATE: Дата (год, месяц, день).
- TIME: Время (часы, минуты, секунды).
- TIMESTAMP: Дата и время (без указания часового пояса).
- TIMESTAMPTZ: Дата и время (с указанием часового пояса).
- INTERVAL: Период времени.

5. Геометрические типы
- POINT: Точка в 2D пространстве.
- LINE: Непрерывная прямая.
- CIRCLE: Круг.
- POLYGON: Многоугольник.

6. Сетевые типы
- CIDR: IPv4 и IPv6 адреса с масками.
- INET: IPv4 и IPv6 адреса без маски.
- MACADDR: MAC-адреса.

7. JSON и XML
- JSON: Данные в формате JSON, позволяют хранить несопоставленные данные.
- JSONB: Бинарный формат JSON, более эффективен для хранения и операций.
- XML: Хранение и запрос данных в формате XML.

8. Модель данных
- ARRAY: Массивы. Позволяют хранить массив значений одного типа.
- COMPOSITE: Пользовательские типы данных, составленные из других типов.
- HSTORE: Набор пар ключ-значение. Полезен для хранения схематически не структурированных данных.

9. Уникальные типы
- UUID: Уникальные идентификаторы, генерируемые на основе алгоритма.
- TSVECTOR и TSQUERY: Для полнотекстового поиска.

Заключение
PostgreSQL предлагает огромный выбор типов данных, позволяющих гибко управлять вашей информацией. Правильный выбор типа данных может существенно улучшить производительность и управляемость вашей базы данных. Убедитесь, что вы используете подходящие типы данных для оптимизации вашего приложения!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
4🥰1
Хотели бы видеть разборы решения задач ЕГЭ по инфе на python?
Anonymous Poll
82%
Да
18%
Нет
Начнём с рассмотрения задач 13 типа ЕГЭ по Информатике (Работа с сетью), они затрагивает организацию компьютерных сетей, адресацию, протоколы передачи данных.

Но для начала немного теории.

IP-адрес - это уникальный идентификатор, который назначается каждому устройству, подключенному к сети интернет. Он позволяет устройствам взаимодействовать друг с другом и обмениваться данными.

Существуют два основных типа IP-адресов:

IPv4: Используется в большинстве современных сетей. Представляет собой 32-битное число, которое записывается в виде четырех чисел от 0 до 255, разделенных точками, каждое из которых весит по 8 бит (например, 192.168.1.1). (Используется на ЕГЭ)
IPv6: Новая версия IP-адреса, использующая 128-битное число, записанное в шестнадцатеричном виде (например, 2001:0:200:3:0:0:0:1).

Адрес сети - это начальный IP-адрес диапазона IP-адресов, которые относятся к одной сети. Он используется для идентификации этой сети и является частью объекта сети, который также включает в себя маску подсети.

Маска - это 32-битное число, которое определяет, какая часть IP-адреса используется для идентификации сети, а какая - для идентификации конкретного устройства в сети.

По IP и маске можно найти адрес сети.
Например, IP - 192.168.1.10 Маска - 255.255.255.0
Нужно перевести в двоичное представление и выполнить побитовую операцию AND
IP-адрес: 11000000 10101000 00000001 00001010
Маска подсети: 11111111 11111111 11111111 00000000
Результат побитовой операции AND: 11000000 10101000 00000001 00000000 = 192.168.1.0 в десятеричном представлении. Это адрес сети

Дальше в процессе решения задач разберёмся подробнее, будем использовать модуль ipaddress
👍1
Решаем при помощи модуля ipaddress

from ipaddress import *

ip="145.92.137.88"
mask = "255.255.240.0"

network = ip_network(f"{ip}/{mask}", strict=False)

print(network) #145.92.128.0/20


Фукнция ip_network() возвращает нам объект сети (IPv4Network), в формате строки: 145.92.128.0/20. Слешом разделены искомый IP адрес сети и число 20 (маска, может задаваться в таком формате) показывает, сколько бит IP-адреса используется для идентификации сети, а сколько - для идентификации устройства внутри сети. Простыми словами это значит, что маска содержит 20 единиц в двоичном представлении, это нам пригодится для решения других задач такого типа.

Из полученного результата (145.92.128.0) следует, что ответ BHEA

Примечание: параметр strict False, чтобы функция не проверяла маску на соответствие стандартам.
👍1
ip = "218.159.208.24"
address = "218.159.192.0"
for mask in range(33):
network = ip_network(f"{ip}/{mask}", False)
if address in str(network):
print(network.netmask)


Перебираем все возможные варианты масок, то есть 0 от 32 (потому что максимум 32 единицы, а минимум ни одной в двоичном представлении)
При помощи функции ip_network() находим адрес сети, выводим в консоль подходящие маски для этого адреса.

Получаем

255.255.192.0
255.255.224.0


Каждое число представляет отдельный байт, видим что самый наибольший третий байт равен 224
👍2
from ipaddress import *

mask = "255.255.255.192"

net = ip_network(f"0.0.0.0/{mask}")
print(net.num_addresses - 2)


Для получения сети мы используем фиктивный IP-адрес, который используется для определения сети, так как адрес сети будет выведен правильно с учетом маски.

Обращаемся к свойству num_addresses, получим количество возможных iP-адресов в данной сети и отнимем 2 (по условию задачи) и получим 62
2
from ipaddress import *

mask = "255.255.240.0"
ip = "232.126.150.18"
net = ip_network(f"{ip}/{mask}", False)

ip = ip_address(ip)
net_ip = ip_address(str(net).split("/")[0])

print(int(ip)-int(net_ip))


Номер компьютера сети равен разнице IP-адреса компьютера и адреса сети. Находим адрес сети по маске и IP. Дальше при помощи функции ip_address получаем объекты IP-адресов в правильном виде. В адресе сети избавляемся от маски. Далее отнимаем от IP-адреса компьютера адрес сети, предварительно конвертировав оба значения в десятичное целочисленное число (int) для удобства и получаем ответ: 1554
🔥51😎1
Python и веб-разработка: Быстрый старт с FastAPI

FastAPI — современный веб-фреймворк для создания API на Python с поддержкой асинхронного программирования. Он позволяет быстро и легко разрабатывать высокопроизводительные RESTful API, используя аннотации типов для валидации данных.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
return {"message": "Hello, World!"}

@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}


Запуск
uvicorn main:app --reload
👍7