【问题标题】:R, Python and pyRserve - multi-threaded examples?R、Python 和 pyRserve - 多线程示例?
【发布时间】:2017-09-07 04:21:23
【问题描述】:

我设置了一个 Python 脚本,它在其中实例化 Rserve,设置了一些 R 脚本和函数,然后针对这些函数运行一些数据。但是,我一直无法创建同一进程的多线程实例。我的核心问题是一个线程似乎总是主导处理,而所有其他线程都被忽略了。

我假设 pyRserve 可以是多线程的 - 这是一个正确的假设吗?是否有任何示例表明这是一个多线程应用程序?

【问题讨论】:

    标签: python r multithreading rserve pyrserve


    【解决方案1】:

    我继续使用代码,结果发现每个线程都需要自己的端口才能工作。我没有在任何地方找到记录,我只是在尝试不同的想法。所以:

    1. 我设置了与我想要的线程一样多的 Rserve 实例。这些实例中的每一个都是自己的端口
    2. 在我的 python 代码中,当我实例化 pyRserve 对象时,我为它分配了一个唯一的端口号。

    多线程现在可以按预期快速运行!

    【讨论】:

    【解决方案2】:

    我假设您使用的是 Windows 机器。 Rserve 的news section 表示最新版本(1.8-6)

    鉴于 Windows 的局限性,我们仍然强烈建议不要使用 操作系统及其如何阻止任何合理使用(Windows 仅支持 单客户端、单线程、合作模式——玩具用途 仅)。

    Rserve 网页上有更多关于 Windows 的注释here

    由于 Windows 操作系统不支持 fork 方法 生成进程的副本,无法初始化 R 和 并行使用所有后续连接的初始化副本。 因此,Rserve for Windows 不支持并发连接。 这意味着所有后续连接共享相同的命名空间 和会话(如在 unix 上 >=0.4 版本)不受支持。它是 仍然可以启动多个 Rserve 来处理多个 连接(只需确保为每个连接使用不同的端口)。

    但是,我使用deployr-rserve 附带的 Rserve 版本在 Windows 上运行它(无需使用在不同端口上运行的多个进程)。不过,这个分叉似乎是基于 Rserve 0.6-3.1 - 所以它已经过时了......

    【讨论】: