gpt4 book ai didi

r - 多线程 Flask 应用程序导致 rpy2 R 进程中的堆栈错误

转载 作者:行者123 更新时间:2023-12-03 12:58:26 25 4
gpt4 key购买 nike

与此处的错误基本相同,但这些解决方案没有提供足够的信息来复制工作示例:Rpy2 in a Flask App: Fatal error: unable to initialize the JIT
在我的 Flask 应用程序中,使用 rpy2.rinterface 模块,每当我初始化 R 时,我都会收到相同的堆栈使用错误:

import rpy2.rinterface as rinterface 
from rpy2.rinterface_lib import openrlib

with openrlib.rlock:
rinterface.initr()

Error: C stack usage 664510795892 is too close to the limit Fatal error: unable to initialize the JIT
rinterface 是 rpy2 中的低级 R 钩子(Hook),但更高级别的 robjects 模块给出了相同的错误。我尝试将上下文锁和 R 初始化包装在来自多处理模块的 Process 中,但有同样的问题。文档说多线程环境会导致 R 出现问题: https://rpy2.github.io/doc/v3.3.x/html/rinterface.html#multithreading
但是上下文管理器似乎并没有阻止与 R 接口(interface)的问题

最佳答案

rlock是 Python 的 threading.Rlock 的一个实例.它应该处理多线程问题。
但是,如果嵌入式 R 在子进程之间共享,多处理可能会导致类似的问题。此演示脚本的代码显示了 R 和 Python 进程的并行处理说明了这一点:https://github.com/rpy2/rpy2/blob/master/doc/_static/demos/multiproc_lab.py
我认为解决这个问题的方法是配置 Flask,或者很可能是您的 wsgi 层,以创建独立的子进程,或者让您的所有 Flask 进程将 R 计算委托(delegate)给辅助进程(动态创建,或在等待任务执行的进程)。

关于r - 多线程 Flask 应用程序导致 rpy2 R 进程中的堆栈错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63785478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com