boost.pythonライブラリで構築されたPython拡張機能の非常に奇妙な動作が発生しました。つまり、コードの一部で:
import my_ext
j = 0
while j<5:
print j
my_ext.do_something(j)
j = j + 1
拡張コード()が別のjに対して何らかの作業を行っている間、jが印刷されているのがわかりませんmy_ext.do_something(j)
(たとえば、j番目のファイルを印刷します)。さらに、j=0とj=1の場合は2つのファイルのみを出力し、スクリプト全体がエラーやその他の通知なしで終了します。
これらすべてにより、コードはちょっと並列に実行されている(マルチスレッド)と思いますが、そのような並列処理は適切に処理されていません。これは、私が構築したboost.pythonライブラリがデフォルトで--threading=multiオプションを使用して作成されているという事実に関連している可能性があります。ただし、オプション--threading = singleを使用して再構築しようとしても効果はなく、マルチスレッドライブラリとして構築されます。この投稿http://mail.python.org/pipermail/cplusplus-sig/2010-October/015771.html は、同様のビルドプロセスの問題を報告していますが、未回答です。
だから私の質問は、特にシングルスレッドになるようにブーストライブラリとboost.pythonを構築する方法です。または、boost.pythonライブラリのシングル/マルチスレッド以外の問題に関連している可能性があります。
追加情報:私はcygwin、boost_1.50.0、python2.6を使用しています、私のOSはマルチコアCPUとnvidia vramを備えたWin7です(後者のハードウェアは両方とも私に知らせずに私の拡張機能のマルチスレッド実行を好むかもしれません)。