我使用tornado.websocket
,其中类方法是WebSocketHandler
方法的覆盖。无论如何,我的代码看起来像这样:
class SocketHandler(tornado.websocket.WebSocketHandler):
current_ninja_pool = enumerate(return_dependency_lvl_0())
current_ninja = next(current_ninja_pool)
file_to_upload = []
def check_origin(self, origin):
return True
def open(self):
logging.info("A client connected.")
self.run()
def run(self):
if condition:
do_this()
else:
do_that()
self.current_ninja = next(self.current_ninja_pool)
self.run()
def on_message(self, message):
do_a_lot_of_stuff()
if message == 'next one':
self.current_ninja = next(self.current_ninja_pool)
def on_close(self):
logging.info("A client disconnected")
所以,我想要的是能够迭代我的enumerate
,以便可以在方法run
或on_message
中处理每个元素,具体取决于我的客户端 - websocket将如何回答。问题是我想在特定条件下进行迭代,而且我不知道如何做到这一点。由于我对操作类变量和实例变量的方式不太熟悉,我可能在这里忽略了一点。
谢谢
答案 0 :(得分:1)
你需要一个迭代器。幸运的是,enumerate
已经返回一个迭代器;你只需要访问它,而不是存储当前项目。
我还怀疑current_ninja_pool
应该是一个实例变量,而不是一个类(它将在所有类的实例中共享)。
class SocketHandler(tornado.websocket.WebSocketHandler):
def __init__(self, *args, **kwargs)
self.current_ninja_pool = enumerate(return_dependency_lvl_0())
file_to_upload = []
def run(self):
item = next(self.current_ninja_pool)
do_something_with(item)