【问题标题】: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】:
我继续使用代码,结果发现每个线程都需要自己的端口才能工作。我没有在任何地方找到记录,我只是在尝试不同的想法。所以:
- 我设置了与我想要的线程一样多的 Rserve 实例。这些实例中的每一个都是自己的端口
- 在我的 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 - 所以它已经过时了......