Estoy intentando ejecutar un script de Python desde una aplicación Cocoa. Funciona bien en el hilo principal, pero me gustaría que se ejecute en segundo plano, en una cola concurrente de GCD.Ejecutar script de Python desde la aplicación Cocoa usando GCD
estoy usando el siguiente método para configurar un gestor de la clase que se ejecuta la secuencia de comandos de 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);
}
Luego de que el guión es (varias veces) se llama desde el siguiente método de instancia, mediante una instancia compartida de Singleton gerente de la clase:
- (id)runScriptWithArguments:(NSArray *)arguments {
return [NSClassFromString(@"MyScriptExecutor") runWithArguments:arguments];
}
los anteriores Objective-C del código de ganchos en el siguiente código Python:
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)
Esto funciona cuando siempre ejecuto los métodos Objective-C anteriores de la cola principal, pero el script devuelve nulo cuando se ejecuta desde cualquier otra cola. ¿Podría alguien explicarme si lo que estoy tratando de hacer simplemente no es compatible, y si hay una buena forma de evitarlo?
Las secuencias de comandos de Python se llaman a menudo y se ejecutan largas, por lo que hacer eso en el hilo principal sería demasiado lento, a lo estaría ejecutando desde una cola en serie. Además, me gustaría incluir el código de simultaneidad dentro de Objective-C tanto como sea posible.
Gracias,
No hay suficiente información en este ejemplo para saber realmente lo que está haciendo. – jkh
¿Me podría decir cómo integró el binario de Python con xcode? – bijan