Мне очень нравится функциональность Stackless Python, и я искал способ эмулировать его синтаксис, используя при этом стандартный интерпретатор Python 3. Статья Алекса Дж. Шампандара в блоге разработчиков игр заставила его выглядеть как будто библиотека greenlet может предоставить эту функциональность. Я немного изменил его код, но лучшей импровизированной оболочкой тасклета, которую я смог придумать, был класс, содержащий гринлет внутри переменной, как таковой:
class tasklet():
def __init__(self,function=None,*variables):
global _scheduled
self.greenlet = greenlet.greenlet(function,None)
self.functioncall = function # Redundant backup
self.variables = variables
_scheduled.append(self)
self.blocked = False
Затем функция эмулирует планирование Stackless, передавая переменные в гринлет при вызове его метода switch()
.
Пока это работает, но я хотел бы иметь возможность вызывать тасклеты в исходном синтаксисе Stackless, например. tasklet(function)(*args)
, в отличие от текущего синтаксиса tasklet(function,*args)
. Я не уверен, где искать в документации, чтобы узнать, как это сделать. Возможно ли это вообще, или это часть изменений Stackless в интерпретаторе?