О проекте 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 бит программы