通过重用过程可以更快地完成Python脚本的C#执行吗?

时间:2015-02-04 13:43:32

标签: c# python process processstartinfo

我正在从我的C#控制台应用程序执行Python脚本。我做了一个简单的解决方案,它执行一个脚本并只输出一个字符串到输出。

Python初始化似乎需要一些时间(大约0.5秒),如果我想在一些迭代代码中运行此代码,这非常烦人。

是否有可能以某种方式重新使用创建的流程,因此Python不需要重新初始化? (ps IronPython 由于缺少库而导致的选项

我使用以下代码执行脚本(此代码在for循环中运行,25次迭代需要大约10秒才能运行...):

        string cmd = @"Python/test.py";
        string args = "";
        ProcessStartInfo start = new ProcessStartInfo();
        start.FileName = @"C:\ex\programs\Python27\python.exe";
        start.Arguments = string.Format("{0} {1}", cmd, args);
        start.UseShellExecute = false;
        start.RedirectStandardOutput = true;
        using (Process process = Process.Start(start))
        {
            using (StreamReader reader = process.StandardOutput)
            {
                string result = reader.ReadToEnd();
                Console.Write(result); //output works
            }
        }

1 个答案:

答案 0 :(得分:1)

可以在python中创建一个restful服务,它接收一个命令或脚本作为字符串,然后执行它(使用exec)。

这个解决方案实际上创建了一个远程python shell,比为每个命令创建一个新进程要快得多。

这也可以帮助您启用有状态执行。换句话说,当您从服务器请求更多命令执行时,您的命令导致的任何副作用(例如变量声明,导入等)将保留。