Python конструктор без стеков

import stackless
class MyTasklet(stackless.tasklet):
    def __init__(self, func, msg):
        pass

def foo():
    pass

msg = 'hello'
MyTasklet(foo, msg)()

я использую stackless pythonэтот код генерирует следующую ошибку:

Traceback (most recent call last):
  File "E:/workspace/python/test/klass.py", line 11, in <module>
    MyTasklet(foo, msg)()
TypeError: tasklet() takes at most 1 argument (2 given)

Это очень странно, так как я не вызывал конструктор stackless.tasklet,

Кто-нибудь знает, в чем именно ошибка.

2 ответа

Решение

Так как проблема связана с подклассами stackless.taskletВы могли бы просто сделать MyTasklet вызываемый object вместо этого, как следует:

import stackless
class MyTasklet(object):
    def __init__(self, func, msg):
        self.func = func
        self.msg = msg 

    def __call__(self):
      t = stackless.tasklet()
      t.bind(self.func)
      t.setup(self.msg)
      t.run()

def foo(msg):
  print msg 

msg = 'hello'
MyTasklet(foo, msg)()

РЕДАКТИРОВАТЬ: В качестве альтернативы вы можете просто переопределить __new__ передать правильные аргументы stackless.tasklet.__new__:

import stackless
class MyTasklet(stackless.tasklet):
  def __new__(cls, func, msg):
    return stackless.tasklet.__new__(MyTasklet, func)
  def __init__(self, func, msg):
    pass

def foo():
  pass

msg = 'hello'
MyTasklet(foo, msg)()

Не подкласс stackless.tasklet,

Это не то, как вы должны использовать Stackless Python - и, что более важно, это сложно и чрезмерно сложно по сравнению с более простым способом. Все, что вам нужно сделать, вы должны быть в состоянии сделать в f, функция, которую вы запускаете в тасклете. Если вы действительно действительно хотите создать подкласс в любом случае, ищите существующие примеры кода, которые уже дадут вам базовый рабочий подкласс тасклетов.

Если вы действительно хотите помочь с этим, никто с опытом работы со Stackless Python действительно не ответит на вопросы здесь. Список рассылки Stackless Python находится там, где они есть.

Другие вопросы по тегам