Python 了解进口、范围和caffe
我有两个文件: main.py mylib.py 然而,尽管在另一个版本的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模块)之间存在一些
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(...)