Python 了解进口、范围和caffe

Python 了解进口、范围和caffe,python,python-import,caffe,Python,Python Import,Caffe,我有两个文件: main.py mylib.py 然而,尽管在另一个版本的mylib.py中的代码几乎相同(我的两个模块目前通过zmq进行通信,因此我想直接调用),但在通过python mylib.py直接调用时,代码仍在CPU上运行 那么,关于导入模块和上下文,有什么我不知道的吗?我是否需要一些额外的作用域信息来确保在正确的上下文中设置GPU模式 更新:我尝试将mylib.py粘贴到main.py,但代码仍然无法使用GPU,因此可能在caffe和其他导入(如cv2或各种ROS模块)之间存在一些

我有两个文件:

main.py mylib.py 然而,尽管在另一个版本的
mylib.py
中的代码几乎相同(我的两个模块目前通过
zmq
进行通信,因此我想直接调用),但在通过
python mylib.py
直接调用时,代码仍在CPU上运行

那么,关于导入模块和上下文,有什么我不知道的吗?我是否需要一些额外的作用域信息来确保在正确的上下文中设置GPU模式


更新:我尝试将
mylib.py
粘贴到
main.py
,但代码仍然无法使用GPU,因此可能在
caffe
和其他导入(如
cv2
或各种ROS模块)之间存在一些模糊的冲突。

这很奇怪-我问题的解决方案是:

mylib.py
移动
caffe不起作用。将\u mode\u gpu()
设置为
\uuu init\uuuuu
方法的开始或结束,直到调用
caffe
的内脏之前,它似乎才粘在一起。我相信这个问题与在一个线程中使用线程并创建
MyObj
,然后在另一个线程中使用它有关。

这很奇怪-我的问题的解决方案是:

mylib.py 移动
caffe不起作用。将\u mode\u gpu()
设置为
\uuu init\uuuuu
方法的开始或结束,直到调用
caffe
的内脏之前,它似乎才粘在一起。我相信这个问题与使用线程和在一个线程中创建
MyObj
有关,但是在另一个线程中使用它

import mylib

class Foo:
    def __init__(self):
        self.myobj = mylib.MyObj(0)

def main():
    foo = Foo()
    foo.myobj.docaffe()
import caffe
caffe.set_mode_gpu()

class MyObj:
    def __init__(self, gpuid):
        caffe.set_device(gpuid)
        self.nd = caffe.Net(...)

    def docaffe():
        self.nd.forward(...)
import caffe

class MyObj:
    def __init__(self, gpuid):
        caffe.set_device(gpuid)
        self.nd = caffe.Net(...)

    def docaffe():
        caffe.set_mode_gpu()
        self.nd.forward(...)