Я уже несколько дней пытаюсь решить эту проблему и не могу понять. Я написал C#. net код, который вызывает python код в al oop и каждый раз передает разные параметры. Код python выполняет обработку данных и записывает результаты в файл.
Ниже приведен фрагмент рабочего кода, который вызывается в итерации
var TrainProcess = new Process();
ProcessStartInfo startTrain = new ProcessStartInfo();
startTrain.FileName = @"python";
startTrain.Arguments = @"sklearn\Regression.py " + TrainParams + string.Format(" --trn {0} --tst {1}", ScaledTraining, ModelPath);
startTrain.CreateNoWindow = true;
startTrain.UseShellExecute = false;
startTrain.RedirectStandardOutput = true;
startTrain.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
TrainProcess.StartInfo = startTrain;
TrainProcess.Start();
TrainProcess.WaitForExit();`
Этот код работает нормально, но он очень медленный потому что каждый раз вызывается около пяти python импортов, и это алгоритм оптимизации, при котором файл python вызывается тысячи раз. Я обнаружил, что время импорта более чем вдвое превышает само время обработки данных !!.
Я пытался решить эту проблему, избегая создания нового процесса на каждой итерации и открывая интерпретатор python для процесса CMD, читая python кодируют строки из файла .py и отправляют python команды из C# несколько раз следующим образом:
string Script = "";
using (TextFieldParser parser = new TextFieldParser(@"sklearn\Regression.py"))
{
Script = parser.ReadToEnd();
}
// some string processing to set up python variables
for (int i = 0; i < Argv.Count(); i++)
{
string arg = Argv[i];
if (arg[0] == '-')
Script = Script.Replace(arg, Argv[i + 1]);
}
inputWriter.WriteLine(Script);
TrainProcess.StandardInput.Flush();
Этот код предназначен для python, чтобы выполнить импорт, и все в один сеанс интерпретатора python, который импортирует импорт один раз и пропускается в последующих итерациях. Теперь, когда я вставляю отправленный скрипт в терминал CMD, чтобы проверить его. Работает нормально и обновляет выходной файл. Однако он ничего не делает при запуске из C#, если только inputWriter не вызывает Close (). как будто сценарий не записан или сброшен, за исключением случаев, когда писатель закрыт. Очевидно, что я не хочу закрывать модуль ввода и держать его открытым для написания большего количества команд в следующих итерациях.
Я надеюсь, что смогу объяснить проблему и поблагодарить вас за помощь.