Python 从Windows转换到Linux导致dask mro错误
我使用Python 从Windows转换到Linux导致dask mro错误,python,linux,dask,method-resolution-order,Python,Linux,Dask,Method Resolution Order,我使用daskpackagedelayed和compute方法构建了一个Python 2.7代码 下面是我的代码的一个小例子: from dask import delayed, compute import time class simulation(): # defines simulation parameters def __init__(self,x): self.x = x jobs = range(50) # sample jobs def sim
dask
packagedelayed
和compute
方法构建了一个Python 2.7代码
下面是我的代码的一个小例子:
from dask import delayed, compute
import time
class simulation():
# defines simulation parameters
def __init__(self,x):
self.x = x
jobs = range(50) # sample jobs
def simulate(sim):
# sample simulation function
time.sleep(0.01*sim.x)
return sim.x**2
def save_results(results):
# sample dump results function
print results
return []
results = []
for i,j in enumerate(jobs) :
sim = simulation(j)
res = delayed(simulate)(sim) # running simulation given input params as job
results.append(res)
if i%10==0 or i==len(jobs)-1: # evaluation every 50 steps
results = compute(results)[0] # dask execution
results = save_results(results) # storing results to DB and returning empty list
由于某些原因,此代码在windows上的anaconda安装程序上运行得非常好,但在Linux上失败
我得到的错误是:
/home/user/.conda/envs/neuro/lib/python2.7/abc.pyc in __subclasscheck__(cls, subclass)
159 return False
160 # Check the subclass hook
--> 161 ok = cls.__subclasshook__(subclass)
162 if ok is not NotImplemented:
163 assert isinstance(ok, bool)
/home/user/.conda/envs/neuro/lib/python2.7/site-packages/backports_abc.pyc
in __subclasshook__(cls, C)
64 def __subclasshook__(cls, C):
65 if cls is Generator:
---> 66 mro = C.__mro__
67 for method in required_methods:
68 for base in mro:
AttributeError: class simulation has no attribute '__mro__'
将软件包(dask
)更新到最新版本没有帮助
有没有关于如何修复的建议
谢谢您的示例在Linux上运行得很好,包括Python 2.7和3.6 然而,正如您在评论中所指出的,我怀疑您的问题在于这一行:
class simulation():
这很奇怪,通常在Python2.7中可以看到以下内容之一
class simulation(object): # new style class
class simulation: # old style class
我建议尝试其中一种,看看这是否能解决您的问题。您的示例实际上在Linux上运行得很好,包括Python 2.7和3.6 然而,正如您在评论中所指出的,我怀疑您的问题在于这一行:
class simulation():
这很奇怪,通常在Python2.7中可以看到以下内容之一
class simulation(object): # new style class
class simulation: # old style class
我建议尝试其中一种方法,看看是否能解决您的问题。显然,由于
dask
试图并行执行命令,它需要在任务之间建立依赖路径
mro
()是python的object
类的内置属性,它定义了在多重继承场景中对象的初始化顺序
dask
在依赖路径中找到simulation
对象,然后检查其mro
以确定正确的初始化顺序
由于某些原因,在我的windows版本中,不需要\uuuuuMRO\uuuuuuuu
属性,但它在linux上
使用来自对象的直接继承将创建此属性,并解决以下问题:
class simulation(object):
# defines simulation parameters
def __init__(self,x):
self.x = x
显然,由于dask
试图并行执行命令,它需要在任务之间建立一个依赖路径
mro
()是python的object
类的内置属性,它定义了在多重继承场景中对象的初始化顺序
dask
在依赖路径中找到simulation
对象,然后检查其mro
以确定正确的初始化顺序
由于某些原因,在我的windows版本中,不需要\uuuuuMRO\uuuuuuuu
属性,但它在linux上
使用来自对象的直接继承将创建此属性,并解决以下问题:
class simulation(object):
# defines simulation parameters
def __init__(self,x):
self.x = x
您是否能够提供一个完整的、其他人可以复制粘贴以复制错误的示例?我的python代码是一个最小的可复制示例。原来的那个长了20倍。至于错误-显然在linux上有\uuumro\uuuu
检查,它与我的类不兼容(但仅在dask
上)。用类模拟(对象)
定义类可以解决这个问题(我自己还不能给出答案)当我复制你的代码时,它找不到simulate
函数或jobs
variableYou's right:)-我已经编辑过,现在这个示例是一个完全可以工作的代码。你能提供一个完整的,其他人可以复制粘贴来复制错误吗?我的python代码是一个最小的可复制示例。原来的那个长了20倍。至于错误-显然在linux上有\uuumro\uuuu
检查,它与我的类不兼容(但仅在dask
上)。用class simulation(object)
定义类将解决这个问题(我自己还不能给出答案),当我复制你的代码时,它找不到simulate
函数或jobs
变量你是对的:)-我已经编辑过了,现在这个示例是一个完全可以工作的代码。