了解进口和范围和咖啡

时间:2016-04-08 02:40:35

标签: python python-import caffe

我有两个文件:

main.py

import mylib

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

def main():
    foo = Foo()
    foo.myobj.docaffe()

mylib.py

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(...)

然而,代码在CPU上运行,尽管mylib.py的替代版本中的代码几乎相同(我的两个模块当前通过zmq进行通信,所以我想直接调用)按预期工作直接通过python mylib.py调用。

那么,有什么我不知道导入模块和上下文的东西吗?我是否需要一些额外的范围信息以确保我在正确的上下文中设置GPU模式?

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

1 个答案:

答案 0 :(得分:0)

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

mylib.py

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(...)

caffe.set_mode_gpu()移动到__init__方法的开头或结尾不起作用,只是在调用它似乎坚持的caffe的胆量之前。我认为问题与在一个线程中使用线程和创建MyObj有关,然后在另一个线程中使用它。