Python 为什么django项目中的uuu init_uuuu模块在同一进程中加载了两次?

Python 为什么django项目中的uuu init_uuuu模块在同一进程中加载了两次?,python,django,boost-python,Python,Django,Boost Python,我正试图用Boost.python将c库包装在高级python接口中。c库的客户机契约之一是,每个进程只能分配一个句柄。我希望我可以通过使用一个全局模块在python端强制执行这个契约 这是我的django组件模块的\uuuu init\uuuu.pyPyGenTL每个进程只能创建一次 import my_c_mod import os print "imager__init__()" print os.getpid() ptl = my_c_mod.PyGenTL() 稍微相关的Boost

我正试图用Boost.python将c库包装在高级python接口中。c库的客户机契约之一是,每个进程只能分配一个句柄。我希望我可以通过使用一个全局模块在python端强制执行这个契约

这是我的django组件模块的
\uuuu init\uuuu.py
PyGenTL
每个进程只能创建一次

import my_c_mod
import os

print "imager__init__()"
print os.getpid()
ptl = my_c_mod.PyGenTL()
稍微相关的Boost.Python代码

    BOOST_PYTHON_MODULE(my_c_mod)
    {
        using namespace boost::python;

        // Create the Python type object for our extension class and define __init__ function.
        class_<PyGenTL>("PyGenTL")
            .def("sys_info", &PyGenTL::SysInfo)
            .def("list_cameras", &PyGenTL::ListCameras)  // 
            .def("start_camera", &PyGenTL::StartCamera)  // 
        ;
    }

    PyGenTL::PyGenTL()
    {
        try {
            std::cout << "PyGenTL ctor(): allocating GenTL Lib." << std::endl;
            Detail::ThrowError(GCInitLib());
            Detail::ThrowError(TLOpen(&hTL));
        } catch (boost::exception& e) {
            std::cerr << "PyGenTL ERROR! ";
            std::cerr << boost::diagnostic_information(e);
            std::cerr << std::endl;
        }
    }
现在,在页面查看期间,
\uuuuu init\uuuu
在同一进程内再次被调用(2912)


当然,通过在C端强制使用单例,可以解决我的特定问题,但是python的方法是什么呢

因为它是通过
sys.path
中的两个不同条目加载的。对你的进口保持一致;我建议导入模块而不必执行项目,例如,
import.
。配置WSGI容器,使您不依赖于
manage.py
sys.path
的破坏将有所帮助。

这可能与“runserver”在每次请求时强制重新编译代码有关吗?可能是因为我对python不熟悉,所以不知道该语言的详细程度。无论是否重新编译,它都不会在构造第二个
PyGenTL
之前调用我的析构函数,这可以解释我得到的运行时警告。C:\work\svn\sw\branchs\python\GenTlServer\..\GenTlServer\imager_init_uu2;py:1:RuntimeWarning:to类std::vector的python转换器已注册;忽略第二个转换方法。但我在sys.path中只看到一个条目,其中my.pyd可用。manage.py是否搜索sys.path之外的内容?否。
manage.py
仍然是Python代码,具有Python的局限性。WSGI似乎是我应该进一步研究的内容。有些面包屑是给别人的。。我不接受这个答案,因为WSGI似乎是一种干扰。我仍然会使用web框架,因为我没有时间重写轮子。当sys.path看起来不正确时,如何修复它?
C:\work\svn\sw\branches\python\GenTlServer>python manage.py runserver
imager__init__()
2264
PyGenTL ctor(): allocating GenTL Lib.
imager__init__()
2912
PyGenTL ctor(): allocating GenTL Lib.
Validating models...

0 errors found
Django version 1.3, using settings 'GenTlServer.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
imager__init__()
2912
PyGenTL ctor(): allocating GenTL Lib.
ERROR (-1004): Requested module is in use.
PyGenTL ERROR! Requested module is in use.
[23/Jun/2011 18:02:22] "GET / HTTP/1.1" 500 76537