Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从Windows转换到Linux导致dask mro错误_Python_Linux_Dask_Method Resolution Order - Fatal编程技术网

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
package
delayed
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
变量你是对的:)-我已经编辑过了,现在这个示例是一个完全可以工作的代码。