2013-10-29 3 views
5

私は大規模なpythonプロジェクトのいくつかのビットを高速化するためにCをピックアップしています。継続的に動作するPythonスクリプトに新しい機能を追加するために、時々.pyファイルをチェックし、その内容を統合します。 Cで同等のことをする方法があるのか​​どうか疑問に思っていました。ダイナミックライブラリの内容をオンザフライでピックアップする方法はありますか?Cでは、動的ライブラリを再コンパイルすることで、実行中のプロセスに新しいコードを統合することは可能ですか?

+0

http://cython.org/またはhttp://pypy.org/を使用して、注意が必要なコードのスピードアップを検討しましたか? – ChrisProsser

+3

@ChrisProsser。私はpypyを考えましたが、これはCを学ぶ良い言い訳でした。私はC言語でハンドルを取得すると実際にcythonと一緒に行くかもしれません。 –

答えて

6

はい、コンパイル時にリンクするのではなく、を使用してライブラリにアクセスし、dlsymの機能にアクセスする必要があります。新しいライブラリに切り替えるには、ハンドルをdlcloseにして新しいハンドルを作成する必要があります。これをモジュールにラップして、すべてを処理しても大したことはありません。

+0

実行中のプロセスで 'dlclose'を使うのは難しいかもしれません。古いライブラリへの参照がないことを確認する必要があります(たとえば、静的変数へのポインタ)。 – ugoren

+0

あなたが好きなライブラリをリンクすることはできますが、シンボル名がその関数のいずれかへの参照を取得している限り、必要に応じて**関数の署名を事前に**必要とすることに言及する価値がありますそれを正常に呼び出す。 – alk

+0

実際には真実ではありません。理論的には、モジュールの残りの部分の署名と、ローダーモジュールが解析して使用する適合データを提供する単一の定義済み関数シグネチャを持つことができます。それは大きくて扱いにくいでしょうが、あなたはそれを行うことができます。 –

2

あなたは窓でそれを行うことができますLoadLibrary/FreeLibaray私はそれに相当するUNIXがあると確信しています。

関連する問題