Python 在ray中初始化Cython类

Python 在ray中初始化Cython类,python,class,cython,ray,Python,Class,Cython,Ray,我正在使用Ray()和Cython 0.29来并行化一些现有的代码,并且我决定使用我的Cython函数之一定义一个cdef类作为其方法,以简化并行运行多个参与者的代码。我遇到的问题是,当我在cython_simple.py()之后创建类的实例时,我得到了一个“太多参数到uuu init_uu错误” 我有几个问题,但第一个问题是当类实例被ray.remote修饰时,如何正确地为其提供参数。 我一直在尝试这个方法,其中Test是导入的类: import ray from cython

我正在使用Ray()和Cython 0.29来并行化一些现有的代码,并且我决定使用我的Cython函数之一定义一个cdef类作为其方法,以简化并行运行多个参与者的代码。我遇到的问题是,当我在cython_simple.py()之后创建类的实例时,我得到了一个“太多参数到uuu init_uu错误”

我有几个问题,但第一个问题是当类实例被ray.remote修饰时,如何正确地为其提供参数。

我一直在尝试这个方法,其中Test是导入的类:

    import ray
    from cython_test.cython_test import Test
    ray.init()
    Test1 = ray.remote(Test)
    #Instatiate an actor
    args = (img, 10, 10)
    a1 = Test1.remote(*args)
但我回来了:

    Traceback (most recent call last):
      File "test_ray_cython.py", line 25, in <module>
        a1 = Test1.remote(*args)
      File "/local/data/home/gmosby/.local/lib/python3.7/site-packages/ray/actor.py", line 282, in remote
        return self._remote(args=args, kwargs=kwargs)
      File "/local/data/home/gmosby/.local/lib/python3.7/site-packages/ray/actor.py", line 384, in _remote
        kwargs)
      File "/local/data/home/gmosby/.local/lib/python3.7/site-packages/ray/signature.py", line 221, in extend_args
        .format(function_name))
    Exception: Too many arguments were passed to the function '__init__'
回溯(最近一次呼叫最后一次):
文件“test\u ray\u cython.py”,第25行,在
a1=Test1.remote(*args)
文件“/local/data/home/gmosby/.local/lib/python3.7/site-packages/ray/actor.py”,第282行,远程
返回自我。\u远程(args=args,kwargs=kwargs)
文件“/local/data/home/gmosby/.local/lib/python3.7/site packages/ray/actor.py”,第384行,在远程
kwargs)
文件“/local/data/home/gmosby/.local/lib/python3.7/site packages/ray/signature.py”,第221行,在extend_args中
.格式(函数名称))
异常:传递给函数“\uuu init\uuu”的参数太多
其他信息:这里的Cython类被初始化为
def\uuu init\uuu(self,img,nx,ny)

如果我想将Cython类与Ray一起使用,它是否必须没有任何初始化参数


找到了解决方法:在Cython类的_init___方法中使用位置参数装饰Cython类似乎失败了,但我决定将一些类成员的设置移到一个单独的函数中。请参见此处的问题说明和解决方法()

找到的解决方法:在Cython类的uu init_u_u方法中使用位置参数装饰Cython类似乎失败了,但我决定将某些类成员的设置移到单独的函数中。请参见此处的问题说明和解决方法()

您认为构造函数需要多少参数?以下是一些文档:问题与Ray无关,与Cython无关。一个更简单的方法是:
类测试:def\uuu init\uuuuuu(self):pass
然后
测试(1,2,3)
-您有一个需要一个参数的构造函数,并且您正在传递它more@DavidW我想这可能是由一个潜规则引起的。在其
\uuuu init\uuuu
中使用带有位置参数的Cython类似乎是不可接受的。看见一旦我从Cython函数中删除了
\uuuuu init\uuuuu
的额外参数,remote就能够创建类实例了,没有问题。以后最好把这些信息放在问题中。您询问时使用的类是常规类(而不是
cdef
类),并且有一个只接受
self
的构造函数。您的问题必须证明您报告的问题