设定:
问题:
怎样才能很好地解决这个问题? 我的第一种方法是在一个单独的线程中运行一个jobqueue-listener,它包含一个pickle WebSocketHandler列表。所有应该存储在redis-db中。由于WebsocketHandler无法被腌制(这种方法看起来非常难看)我正在寻找另一种解决方案。
有什么想法吗?
答案 0 :(得分:1)
您可以将它们存储在类级别(或仅仅是全局)字典中,而不是试图挑选您的WebSocketHandler实例。
class MyHandler(WebSocketHandler):
connections = {}
def __init__(self, *args, **kwargs):
self.key = str(self)
self.connections[self.key] = self
然后你将self.key和作业一起传递给beanstalk,当你找到一份工作时,你会查找哪个连接用密钥发送输出,然后写入它。像(伪代码......)
的东西 def beanstalk_listener():
for response in beanstalk.listen():
MyHandler.connections[response.data[:10]].write_message(response[10:])
我认为尝试在redis中保持websockethandler连接没有任何价值。它们本质上是短暂的。如果您的龙卷风进程重新启动/死亡,则无用。如果您要做的是记录哪个用户正在等待哪个作业的输出,那么您需要单独跟踪它。