在Django中使用rpy2时看到一些奇怪的行为
rfn.py:
from rpy2.robjects import r as R
import rpy2.robjects as robjects
import json
from .models import TestModel
# 4-5 various R functions
R('''
library(someLib)
someFunc <- function() {
}
''')
class SpectraScores():
def __init__(self, form):
pass
# A number of other function which when commented out
# do not change the error being produced.
# E.g.,
def init():
pass
views.py:
from .rfn import SpectraScores
def view_cosine(request):
if request.method == 'POST':
form = ViewCosineForm(request.POST, request.FILES)
if form.is_valid():
sc = SpectraScores(form).info()
return render(
request,
'chat/view_cosine.html',
{'form': form, 'sc': sc}
)
else:
form = ViewCosineForm()
return render(request, 'chat/view_cosine.html', {'form': form})
forms.py:
from .models import TestModel
class ViewCosineForm(forms.Form):
'''
Select any spectra from lab, library, metadata
'''
sid = forms.ModelMultipleChoiceField(
queryset = TestModel.objects.all(),
to_field_name = "test",
required = False
)
从shell运行并打开对“/cosine/”的GET(??)请求会产生以下结果:
$ ./manage.py runserver
[16/Feb/2021 23:32:08] "GET /cosine/ HTTP/1.1" 200 9083
[16/Feb/2021 23:32:08] "GET /static/js/jquery-3.3.1.min.js HTTP/1.1" 304 0
[16/Feb/2021 23:32:08] "GET /static/js/d3.min.js HTTP/1.1" 304 0
[16/Feb/2021 23:32:08] "GET /static/js/bootstrap.bundle.js HTTP/1.1" 304 0
Not Found: /favicon.ico
R[write to console]: Error: ignoring SIGPIPE signal
R[write to console]: Fatal error: unable to initialize the JIT
*** stack smashing detected ***: terminated
此时Django./manage.py runserver
退出
然后,在发生此错误后,跳回命令提示符并重新启动Django(./manage.py runserver
)会导致另一个错误立即发生,导致启动过程崩溃!每次(一行中一次或多次)都会发生此错误,或者根本不会发生此错误:
(venv) [dave@localhost maldidb]$ ./manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
Exception in thread django-main-thread:
Traceback (most recent call last):
File "/usr/lib64/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/lib64/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/django/utils/autoreload.py", line 53, in wrapper
fn(*args, **kwargs)
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 118, in inner_run
self.check(display_num_errors=True)
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/django/core/management/base.py", line 392, in check
all_issues = checks.run_checks(
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/django/core/checks/registry.py", line 70, in run_checks
new_errors = check(app_configs=app_configs, databases=databases)
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/django/core/checks/urls.py", line 13, in check_url_config
return check_resolver(resolver)
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/django/core/checks/urls.py", line 23, in check_resolver
return check_method()
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/django/urls/resolvers.py", line 408, in check
for pattern in self.url_patterns:
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/django/utils/functional.py", line 48, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/django/urls/resolvers.py", line 589, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/django/utils/functional.py", line 48, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/django/urls/resolvers.py", line 582, in urlconf_module
return import_module(self.urlconf_name)
File "/home/dave/Dev/maldi-django/venv/lib64/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/home/dave/Dev/maldi-django/maldidb/soMedia/urls.py", line 9, in <module>
path('', include('chat.urls')),
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/django/urls/conf.py", line 34, in include
urlconf_module = import_module(urlconf_module)
File "/home/dave/Dev/maldi-django/venv/lib64/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/home/dave/Dev/maldi-django/maldidb/chat/urls.py", line 3, in <module>
from . import views
File "/home/dave/Dev/maldi-django/maldidb/chat/views.py", line 55, in <module>
from rpy2.robjects import r as R
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/rpy2/robjects/__init__.py", line 19, in <module>
from rpy2.robjects.robject import RObjectMixin, RObject
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/rpy2/robjects/robject.py", line 10, in <module>
rpy2.rinterface.initr_simple()
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/rpy2/rinterface.py", line 859, in initr_simple
_post_initr_setup()
File "/home/dave/Dev/maldi-django/venv/lib/python3.8/site-packages/rpy2/rinterface.py", line 940, in _post_initr_setup
signal.signal(signal.SIGINT, _sigint_handler)
File "/usr/lib64/python3.8/signal.py", line 47, in signal
handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
ValueError: signal only works in main thread
应该注意的是,views.py中正在以以下decorator(@start_new_thread
)的形式进行线程处理,但是在上面的请求中没有发生线程处理。相反,线程是为某些其他视图保留的,这些视图在上述上下文中没有执行
同样,从views.py:
def start_new_thread(function):
'''Starts a new thread for long-running tasks'''
def decorator(*args, **kwargs):
t = Thread(target = function, args = args, kwargs = kwargs)
t.daemon = True
t.start()
return t
return decorator
最后,信号?可能不相关,但有一些地方考虑了使用信号的代码,例如:
@receiver(post_save, sender=User)
def create_profile(sender, **kwargs):
...
然而,注释掉所有提到的接收器和导入到Django信号(例如from django.db.models.signals import post_save
)仍然不会影响不稳定的行为
编辑: 经过一定程度的简化后,当对rpy2的唯一引用是以下引用时,仍然会出现错误:
views.py
from rpy2.robjects import r as R
由于代码中没有其他对R或rpy2的引用,错误仍然会发生!要清楚,删除这一行会导致上述错误停止
可能是本地R环境中的错误
目前没有回答
相关问题 更多 >
编程相关推荐