О проекте Mind Hub
Mind-Hub - личный сборник описания технологий
threading и asyncio - запуск функций в фоне
Если func_async — асинхронная функция (с async def), можно делать так:
import asyncio
def func1():
print("func1 start")
# длительная синхронная работа
import time; time.sleep(1)
print("func1 end")
def func2():
print("func2 start")
import time; time.sleep(1)
print("func2 end")
async def func_async():
print("func_async start")
await asyncio.sleep(5) # имитация долгой работы
print("func_async end")
def func4():
print("func4 start")
import time; time.sleep(1)
print("func4 end")
async def main():
func1()
func2()
# запускаем асинхронную задачу, но не ждём её
asyncio.create_task(func_async())
func4()
print("Все остальное завершено")
asyncio.run(main())
✅ Здесь func_async() выполняется параллельно, func4 не ждёт её завершения.
threading:
import threading
import time
# небольшая обёртка, чтобы запускать любую функцию в фоне
def run_async(func, *args, **kwargs):
threading.Thread(target=func, args=args, kwargs=kwargs, daemon=True).start()
# Примеры функций
def func1():
print("func1 start")
time.sleep(1)
print("func1 end")
def func2():
print("func2 start")
time.sleep(1)
print("func2 end")
def func_async():
print("func_async start")
time.sleep(5) # имитация долгой работы
print("func_async end")
def func4():
print("func4 start")
time.sleep(1)
print("func4 end")
# Основной код
func1()
func2()
# Запускаем функцию в фоне
run_async(func_async)
# Продолжаем основной код сразу
func4()
print("Основной поток завершён, func_async выполняется в фоне...")
Можно запускать любую функцию в фоне, просто вызвав run_async(твоя_функция, аргументы...)
Работа с файлами в Python
1. Открытие файлов
file = open("example.txt", "r") # "r" = read (чтение)
Для работы с файлом используется функция open(). Она возвращает объект файла, с которым можно работать.
2. Чтение данных из файлов
Читать все сразу:
with open("example.txt", "r") as file:
content = file.read()
print(content)
Читать построчно:
with open("example.txt", "r") as file:
for line in file:
print(line.strip()) # strip убирает лишние переносы строк
Читать определенное количество символов:
with open("example.txt", "r") as file:
print(file.read(5)) # прочитает первые 5 символов
3. Запись
Перезапись:
with open("example.txt", "w") as file:
file.write("Привет, мир!\n")
file.write("Это новая строка.\n")
Добавление (дозапись):
with open("example.txt", "a") as file:
file.write("Добавленная строка.\n")
4. Работа с бинарными файлами
with open("image.png", "rb") as file:
data = file.read()
with open("copy_image.png", "wb") as file:
file.write(data)
Python делает работу с файлами очень удобной и безопасной через with, который автоматически закрывает файлы.
FTP сервер на Python
У проекта есть зависимость, пакет pyftpdlib
pip install pyftpdlib
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
import os
# Константы для настройки сервера
FTP_HOST = "0.0.0.0" # Адрес для прослушивания (0.0.0.0 - для всех интерфейсов)
FTP_PORT = 5000 # Порт сервера (по умолчанию 21)
FTP_USER = "user" # Имя пользователя
FTP_PASSWORD = "password" # Пароль
FTP_DIRECTORY = "./" # Каталог для файлов
def run_ftp_server():
# Создаем авторизатор для управления пользователями
authorizer = DummyAuthorizer()
# Добавляем пользователя с правами "r" (чтение) и "elrw" (чтение, запись, удаление, создание)
authorizer.add_user(FTP_USER, FTP_PASSWORD, FTP_DIRECTORY, perm="elradfmwMT")
# Создаем обработчик FTP
handler = FTPHandler
handler.authorizer = authorizer
# Создаем и запускаем сервер
server = FTPServer((FTP_HOST, FTP_PORT), handler)
print(f"FTP-сервер запущен на {FTP_HOST}:{FTP_PORT}")
print(f"Каталог: {FTP_DIRECTORY}")
print(f"Пользователь: {FTP_USER}, Пароль: {FTP_PASSWORD}")
server.serve_forever()
if __name__ == "__main__":
# Создаем каталог для FTP, если его нет
os.makedirs(FTP_DIRECTORY, exist_ok=True)
# Запускаем сервер
run_ftp_server()
Простой логер на Python
import os
import threading
from datetime import datetime
_log_lock = threading.Lock()
_log_path = "log.txt" # путь по умолчанию
def set_log(message: str):
timestamp = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
log_line = f"[{timestamp}] {message}"
with _log_lock:
try:
os.makedirs(os.path.dirname(_log_path), exist_ok=True)
with open(_log_path, "a", encoding="utf-8") as f:
f.write(log_line + "\n")
f.flush()
os.fsync(f.fileno())
except Exception as e:
print(f"[set_log Error] {e}")
Запуск 32 бит приложений
Для запуска приложений под 32 битную архитектуру i386(x86) добавить ее и обновить список пакетов:
sudo dpkg --add-architecture i386
sudo apt update
Далее устанавливаем библиотеки:
sudo apt install libc6:i386 libstdc++6:i386
Но лучше всего установить полный набор:
sudo apt install gcc-multilib
Теперь у вас есть возможность запускать 32 бит программы