私はCocoaアプリケーションからPythonスクリプトを実行しようとしています。メインスレッドでうまくいっていますが、バックグラウンドでGCDキューを同時に実行したいと思っています。GCDを使用したCocoaアプリケーションからのPythonスクリプトの実行
私はセットアップにPythonスクリプトを実行するマネージャクラスの次のメソッドを使用しています:スクリプトは(繰り返し)の共有シングルトンインスタンスを使用して、以下のインスタンスメソッドから呼び出され
- (BOOL)setupPythonEnvironment {
if (Py_IsInitialized()) return YES;
Py_SetProgramName("/usr/bin/python");
Py_Initialize();
NSString *scriptPath = [[NSBundle mainBundle] pathForResource:@"MyScript" ofType:@"py"];
FILE *mainFile = fopen([scriptPath UTF8String], "r");
return (PyRun_SimpleFile(mainFile, (char *)[[scriptPath lastPathComponent] UTF8String]) == 0);
}
れた後、マネージャクラス:
from Foundation import *
def run_with_arguments(arguments):
# ...a long-running script
class MyScriptExecutor(NSObject):
@classmethod
def runWithArguments_(self, arguments):
return run_with_arguments(arguments)
次のPythonコードに
- (id)runScriptWithArguments:(NSArray *)arguments {
return [NSClassFromString(@"MyScriptExecutor") runWithArguments:arguments];
}
上記Objective-Cのコードフック
私は上記のObjective-Cメソッドを常にメインキューから実行しますが、他のキューから実行すると、このスクリプトはnullを返します。私がしようとしていることがちょうどサポートされていない場合、そしてその周りに良い方法があるかどうか、誰かが私に説明することができますか?
Pythonスクリプトは頻繁に呼び出され、長時間実行されるため、メインスレッドでこれを行うのは遅すぎるため、シリアルキューを実行することになります。さらに、Objective-C内にできるだけ並行性コードを含めることをお勧めします。 Pythonの埋め込みに固有のいくつかのかなり複雑なスレッドの懸念があるよう
おかげで、this pageから
実際に行っていることを実際に知るには、この例の情報が不十分です。 – jkh
xcodeにPythonバイナリをどのように統合したか教えてください。 – bijan