首页 > 代码库 > web.py使用session.DiskStore存储session的时候报EOFError异常解决方案
web.py使用session.DiskStore存储session的时候报EOFError异常解决方案
问题原因
由于多个线程同时读写session文件导致有线程的行为被拒绝报错,为了避免这种同时性问题,可以加一些延迟,或者每个线程有自己的副本,最后覆盖唯一的session
解决方案
- https://github.com/webpy/webpy/issues/191
- https://github.com/webpy/webpy/issues/83
方法一:
修改 session.py 里 session.DiskStore的 __setitem__ 方法
def __setitem__(self, key, value): path = self._get_path(key) pickled = self.encode(value) try: tname = path+"."+threading.current_thread().getName() f = open(tname, ‘w‘) try: f.write(pickled) finally: f.close() os.rename(tname, path) # atomary operation except IOError: pass
但是似乎在 win 下 rename 似乎不能直接覆盖目标文件,所以。
方法二:
def __getitem__(self, key): path = self._get_path(key) if os.path.exists(path): while True: try: pickled = open(path).read() return self.decode(pickled) except EOFError: time.sleep(0.1) else: raise KeyError, key
web.py使用session.DiskStore存储session的时候报EOFError异常解决方案
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。