Да, у меня есть. Я написал программу для подсчета строк для двоичного (с префиксом по длине, а не с разделителем) выходного файла bcp один раз, и в итоге мне пришлось переделывать его в C, потому что Python был слишком медленным. Эта программа была довольно маленькой (потребовалось всего несколько дней, чтобы переписать ее на C), поэтому я не стал пытаться создать гибридное приложение (python glue с центральными подпрограммами, написанными на C), но это также был жизнеспособным маршрутом.
Более крупное приложение с критическими битами производительности может быть написано на комбинации C и языка более высокого уровня. Вы можете написать критические для производительности части на C с интерфейсом для Python для остальной части системы. SWIG , Pyrex или Boost.Python (если вы используете C ++) - все это обеспечивает хорошие механизмы для выполнения слежения за интерфейсом Python. API C для python более сложен, чем для Tcl или Lua , но его невозможно построить вручную. В качестве примера API-интерфейса Python / C, созданного вручную, посмотрите cx_Oracle .
Этот подход использовался во многих успешных приложениях, начиная с 1970-х годов (о которых я знаю). Mozilla была написана в основном на Javascript вокруг ядра, написанного на C. Несколько CAD-пакетов , Interleaf (система публикации технических документов) и, конечно, EMACS в основном написаны на LISP с центральным C, ассемблером или другим ядром. Довольно много коммерческих приложений с открытым исходным кодом (например, Chandler или Sungard Front Arena ) используют встроенные интерпретаторы Python и реализуют существенные части приложения на Python.
РЕДАКТИРОВАТЬ: В ответ на комментарий Dutch Masters сохранение кого-то с навыками программирования C или C ++ в команде для проекта Python дает вам возможность написать некоторые приложения для скорости. Области, в которых можно ожидать значительного прироста производительности, - это то, где приложение выполняет итеративные действия с большой структурой данных или большим объемом данных. В случае счетчика строк, приведенного выше, он должен был вдохнуть ряд файлов общим объемом в несколько гигабайт и пройти через процесс, где он считывал префикс переменной длины и использовал его для определения длины поля данных. Большинство полей были короткими (всего несколько байтов). Это было несколько неожиданно, очень низкий уровень и итеративный, что делало его естественным для C.
Многие из библиотек Python, такие как numpy , cElementTree или cStringIO , используют оптимизированное ядро C с API-интерфейсом Python, который облегчает работу с данными в агрегат. Например, numpy имеет матричные структуры данных и операции, написанные на C, которые выполняют всю тяжелую работу, и Python API, который предоставляет сервисы на агрегированном уровне.