【问题标题】:Can C# execution of Python script be done faster by re-using process?可以通过重用进程更快地完成 Python 脚本的 C# 执行吗?
【发布时间】:2015-04-04 01:36:01
【问题描述】:

我正在从我的 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
            }
        }

【问题讨论】:

  • 如果有办法(IPC?)在c#和python之间进行通信,那么你可以运行一次python程序并保持打开状态。 Python 只会等到 c# 请求做某事,处理它并继续等待。
  • 啊“stackoverflow.com/questions/23374854/…”。我从错误的角度看待它

标签: c# python process processstartinfo


【解决方案1】:

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

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

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

【讨论】:

  • 我想这可能是我真正需要的
  • 我正在关注本教程:ernest-bonat.medium.com/… 但 httpWebRequest.GetResponse() 需要很长时间。有更快的解决方案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 2019-03-07
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
相关资源
最近更新 更多