I work at a very small (3 devs) startup. Our backend is Python / Django. We have some computation-intensive code for demand estimation which we’ve written in Julia, and we want to integrate that code into our Django backend and wrap/expose it via endpoint.
So, in our Django project we have an app demand_estimation
which lives alongside the usual suspects of db
, util
, docs
, etc. Inside the demand_estimation
directory there is:
-
DemandEstimation.jl
, which defines moduleDemandEstimation
and contains the core logic; -
demand_estimation.py
, which wraps the Julia-side core logic with pyjulia (and defines endpoints); -
__init__.py
, which looks like:
# set up Julia sans precompilation (necessary for conda python)
from julia.api import Julia
Julia(compiled_modules=False)
# load julia demand estimation code
from julia import Pkg
Pkg.activate(".") # django backend environment
from julia import Main
Main.include("demand_estimation/DemandEstimation.jl")
from julia.Main import DemandEstimation as DE # noqa
Then in demand_estimation.py
we have from . import DE
and make calls like DE.important_function(args)
. This works well…in tests.
However, when we actually try to run a debug/test/development server with Django’s runserver
command, there are segfaults left and right. In particular, we’ve traced the segfaults to the following code in demand_estimation.py
:
from . import DE # DE is DemandEstimation julia module defined in the __init__.py
def call_something_in_julia(arg):
func_to_call = DE.important_func # this line causes a segfault
return func_to_call(arg)
To reiterate, a Django test that hits call_something_in_julia
will pass without error; hitting a running server’s endpoint that in turn calls call_something_in_julia
causes a segfault.
Any idea on what might be causing this segfault, how to mitigate it, and/or why it happens only when running a server and not in tests? We’re pretty much at wit’s end and considering just abandoning the backend Julia, which is a shame for lots of reasons, not least because I greatly prefer writing Julia over Python!