2016-04-08 19 views
1

我有兩個文件:瞭解進口和範圍及朱古力

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進行通信,所以我想直接調用)的代碼相同的代碼在直接通過調用時按預期工作。

那麼,有什麼我不知道導入模塊和上下文嗎?我是否需要一些額外的範圍信息來確保我在正確的上下文中設置GPU模式?

更新:我嘗試粘貼到mylib.pymain.py,代碼仍然不能使用GPU,所以也許有caffe等進口,像cv2或各種ROS模塊之間的一些模糊的衝突。

回答

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有關,但是在另一個線程中使用它。