Я знаю, что вам, вероятно, не понравится этот ответ, но, честно говоря: напишите его на C ++, используя boost :: python или непосредственно на Cython.
Можно было бы написать расширение с использованием C #, но вам нужно было бы преобразовать структуры данных, используемые Python, импортировать большую часть Python C API, маршалировать все назад и вперед между управляемым инеуправляемый код, сопоставление времени жизни объектов между сборщиком мусора в Python и C # и т. д., что, скорее всего, просто не стоит.
Вы также можете вызвать зависимость от платформы .NET, потерю независимости от платформы (возможно, даже приMono), хотя в целом это дает небольшую выгоду.
Если вы хотите использовать сборки C # в CPython, вам лучше всего выбрать модуль win32com pywin32 на стороне Python и COM Interop насторона .NET.Это позволяет вам выставлять ваши объекты C # как COM-классы с несколькими добавленными атрибутами на уровне источника и легко импортировать их в Python как объекты с событиями и всем остальным.У меня был большой успех при интеграции обеих платформ таким образом.