我试图用Boost.Python. c库的客户机契约之一是每个进程只能分配一个句柄。我希望通过使用模块global在python端强制执行这个契约。在
这是我的django组件模块的__init__.py
。PyGenTL
每个进程只能创建一次!在
import my_c_mod
import os
print "imager__init__()"
print os.getpid()
ptl = my_c_mod.PyGenTL()
稍有关联Boost.Python代码
^{pr2}$注意构造函数中的print语句,以及操作系统获取PID()在init中。这是django进程的输出。请注意,在python的开头创建了两个进程,这就是为什么要创建两个PyGenTL
。到目前为止,还不错。在
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.
现在,在页面查看期间,__init__
在同一进程中再次被调用(2912)
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
在我的C语言中,强制执行是一个特别的问题?在
因为它是通过
sys.path
中的两个不同条目加载的。对于导入要保持一致;我建议导入模块时不必经过项目,例如import <app>.<module>
。配置WSGI容器使您不依赖manage.py
对sys.path
的损坏将有所帮助。在相关问题 更多 >
编程相关推荐