Русский
Открыть в Telegram

Пост ✈️В Python си-коллбеки (C callbacks) — это механизм, позволяющий вызывать функции, написанные на языке C или C++, из Pyt…

1 сентября 2026
P
Pythoner
Фотография
✈️В Python си-коллбеки (C callbacks) — это механизм, позволяющий вызывать функции, написанные на языке C или C++, из Python кода. Это мощный инструмент для интеграции Python с существующими библиотеками C/C++ или для оптимизации производительности критически важных участков кода. ➡️ Применение си-коллбеков находит применение в различных областях, таких как: * Интеграция с C/C++ библиотеками: вызов функций из библиотек, написанных на C/C++, непосредственно из Python. * Оптимизация производительности: реализация критичных к производительности участков кода на C/C++ и вызов их из Python. * Обработка событий: использование функций Python в качестве обработчиков событий в C/C++ приложениях. * Расширение функциональности Python: добавление новых возможностей в Python с помощью C/C++. ➡️Вот пример использования си-коллбеков с ctypes: import ctypes import time # Загрузка библиотеки C (libcallback_example.so - пример, нужно скомпилировать код C) lib = ctypes.CDLL("./libcallback_example.so") # Определение типа функции обратного вызова CMPFUNC = ctypes.CFUNCTYPE(None, ctypes.c_int) # Функция Python, которая будет использоваться в качестве обратного вызова def my_callback(value): print(f"Python callback called with value: {value}") # Регистрация функции обратного вызова в библиотеке C # Предполагается, что в библиотеке C есть функция register_callback, принимающая указатель на функцию register_callback = lib.register_callback register_callback.argtypes = [CMPFUNC] register_callback.restype = None register_callback(CMPFUNC(my_callback)) # Вызов функции C, которая будет периодически вызывать функцию обратного вызова # Предполагается, что в библиотеке C есть функция run_loop, которая запускает цикл run_loop = lib.run_loop run_loop.argtypes = [] run_loop.restype = None run_loop() ➡️Пример кода на C (callback_example.c): #include <stdio.h> #include <unistd.h> // for sleep typedef void (*callback_function)(int); static callback_function registered_callback = NULL; void register_callback(callback_function callback) { registered_callback = callback; } void run_loop() { int i = 0; while (i < 5) { sleep(1); if (registered_callback != NULL) { registered_callback(i); } i++; } } ➡️Компиляция кода на C: gcc -shared -o libcallback_example.so -fPIC callback_example.c ⬆️ В этом примере показано, как использовать ctypes для вызова функций из динамически подключаемой библиотеки C и передачи функции Python в качестве обратного вызова. Код на C регистрирует коллбек и периодически вызывает его. Важно правильно определить типы данных с помощью ctypes.CFUNCTYPE и argtypes/restype. Перед запуском Python кода необходимо скомпилировать код C в shared library (.so файл для Linux). 🐍 Pythoner
10 · 1.2K ·

Рядом в ленте

это сообщение
PPythoner✈️googlesearch — это простая в использовании библиотека для Python, которая позволяет отправлять запросы в Google и получать ссылки на результаты поиска прямо и

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем