2
(Py.GIL())ブロックを使用して例外を処理する方法はありますか?例えば(Py.GIL())ブロックを使用して例外を処理する方法pythonnet
:
using System;
using Python.Runtime;
public class Test{
public static void Main(){
using(Py.GIL()){
try{
dynamic module = Py.Import("module");
dynamic result = module.function("argument");
Console.WriteLine(result);
}
catch(Excepiton ex){
// Handled Exception
}
}
}
}
私はusing(Py.GIL())
ブロックを使用するC#の関数を呼び出す、ので、私はこの質問をしました。メインスレッドが完了するのを待つ新しいスレッドで実行されます。それは最初のラウンドのために働き、次のラウンドではusing block
に止まり、例外を表示せずにアプリケーションがフリーズします。
メインスレッドが実行を待機するのを止めようとしましたが、ワーカースレッドの実行はすべて、最初のラウンド後にPy.GIL()
のusing block
で停止します。
スレッドの実行に関して、私はスレッドプールを使用しています。
Thread.Factory.StartNew(FunctionName);
@denfromufaご返信ありがとうございます。あなたはこのリンクをチェックすることができますhttp://stackoverflow.com/questions/42759968/worker-thread-stops-execution-when-it-reaches-at-using-block-c-sharp-windows-for – ash
完全に再現可能な例は便利です。実行中はいつでも、1つのCLRスレッドのみがGILを取得できます。 – denfromufa