J'écris une application fonctionnant avec des plugins. Il existe deux types de plugins: Engine
et Model
. Les objets Engine
ont une méthode update()
qui appelle la méthode Model.velocity()
.Passer des pointeurs de fonction C entre deux modules python
Pour des performances raisons pour lesquelles ces méthodes sont autorisés à écrire en C. Cela signifie que, parfois, ils seront écrits en Python et parfois écrit en C.
Le problème est que ces forces pour faire un Python cher appel de fonction de Model.velocity()
en Engine.update()
(et également réacquérir le GIL). J'ai pensé à ajouter quelque chose comme Model.get_velocity_c_func()
à l'API, qui permettrait aux implémentations Model
de renvoyer un pointeur vers la version C de leur méthode velocity()
si disponible, permettant à Engine
d'effectuer un appel de fonction C plus rapide.
Quel type de données dois-je utiliser pour passer le pointeur de fonction? Et est-ce un bon design du tout, peut-être il y a un moyen plus facile?
Comment est-ce que je peux passer ceci de mon 'Model' au' Engine'? Tout ce que j'ai du point de vue du moteur est une instance Python du 'Model' actuellement utilisé, je ne sais pas comment" appeler "le code C (qui peut même pas exister) dans le' Model' du 'Moteur'. –
Je réalise que mon commentaire n'a pas de sens ... Je veux dire, comment puis-je passer un PyCObject de C à Python? –
Peu importe ce que je comprends maintenant, je fais juste PyCObject_FromVoidPtr/PyCObject_AsVoidPtr des deux côtés, merci :) –