我有一个目录树
working_dir\
main.py
my_agent\
my_worker.py
my_utility\
my_utils.py
每个文件中的代码如下
""" main.py """
import os, sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from my_agent.my_worker import MyWorker
import ray
ray.init()
workers = [MyWorker.remote(i) for i in range(10)]
ids = [worker.get_id.remote() for worker in workers]
# print(*ids, sep='\n')
print(*ray.get(ids), sep='\n')
""" worker.py """
from my_utility import my_utils
import ray
@ray.remote
class MyWorker():
def __init__(self, id):
self.id = id
def get_id(self):
return my_utils.f(self.id)
""" my_utils.py """
def f(id):
return '{}: Everything is fine...'.format(id)
这是我收到的错误信息的一部分
回溯(最近一次呼叫的最后一次):
文件“/users/aptx4869/anaconda3/envs/p35/lib/python3.5/site packages/ray/function_manager.py”,第616行,在fetch_和_register_actor中
unpickled_class=pickle.loads(pickled_class)
子导入中的文件“/users/aptx4869/anaconda3/envs/p35/lib/python3.5/site packages/ray/cloudpickle/cloudpickle.py”,第894行
进口
(姓名)
导入错误:没有名为“我的\实用程序”的模块
回溯(最近一次呼叫的最后一次):
文件“main.py”,第12行,in
打印(*ray.get(id),sep='\n')
GET中的文件“/users/aptx4869/anaconda3/envs/p35/lib/python3.5/site packages/ray/worker.py”,第2377行
提高价值
ray.worker.raytask错误:ray_worker(pid=30025,host=aimacbook)
异常:名为MyWorker的参与者导入失败,因此无法执行此方法
如果我删除所有与
ray
以上代码工作正常。
因此,我大胆地猜测原因是
射线
在新进程中运行每个参与者,并
sys.path.append
只在主流程中工作。所以我将以下代码添加到
worker.py
import os, sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
但它仍然不起作用:相同的错误消息出现了。现在我没有主意了,我该怎么办?