提交 5c11aada authored 作者: Frederic's avatar Frederic

Move the compilation code to a separate function to better see the control flow.

上级 034bb0d2
...@@ -7,29 +7,10 @@ from theano import config ...@@ -7,29 +7,10 @@ from theano import config
if os.path.exists(os.path.join(config.compiledir,'cutils_ext.so')): if os.path.exists(os.path.join(config.compiledir,'cutils_ext.so')):
os.remove(os.path.join(config.compiledir,'cutils_ext.so')) os.remove(os.path.join(config.compiledir,'cutils_ext.so'))
# Ensure no-one else is currently modifying the content of the compilation
# directory. This is important to prevent multiple processes from trying to
# compile the cutils_ext module simultaneously.
try:
# If we load a previously-compiled version, config.compiledir should
# be in sys.path.
if config.compiledir not in sys.path:
sys.path.append(config.compiledir)
from cutils_ext.cutils_ext import *
except ImportError:
import cmodule
get_lock()
try:
try:
# We must retry to import it as some other processs could
# have been compiling it between the first failed import
# and when we receive the lock
from cutils_ext.cutils_ext import *
except ImportError:
import cmodule
code = """ def compile_cutils():
"""Do just the compilation of cutils_ext"""
code = """
#include <Python.h> #include <Python.h>
extern "C"{ extern "C"{
static PyObject * static PyObject *
...@@ -66,13 +47,38 @@ except ImportError: ...@@ -66,13 +47,38 @@ except ImportError:
} }
""" """
loc = os.path.join(config.compiledir, 'cutils_ext') loc = os.path.join(config.compiledir, 'cutils_ext')
if not os.path.exists(loc): if not os.path.exists(loc):
os.mkdir(loc) os.mkdir(loc)
args = cmodule.GCC_compiler.compile_args()
cmodule.GCC_compiler.compile_str('cutils_ext', code, location=loc,
preargs=args)
try:
# If we load a previously-compiled version, config.compiledir should
# be in sys.path.
if config.compiledir not in sys.path:
sys.path.insert(0, config.compiledir)
from cutils_ext.cutils_ext import *
except ImportError:
import cmodule
get_lock()
# Ensure no-one else is currently modifying the content of the compilation
# directory. This is important to prevent multiple processes from trying to
# compile the cutils_ext module simultaneously.
try:
try:
# We must retry to import it as some other processs could
# have been compiling it between the first failed import
# and when we receive the lock
from cutils_ext.cutils_ext import *
except ImportError:
import cmodule
args = cmodule.GCC_compiler.compile_args() compile_cutils()
cmodule.GCC_compiler.compile_str('cutils_ext', code, location=loc,
preargs=args)
from cutils_ext.cutils_ext import * from cutils_ext.cutils_ext import *
finally: finally:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论