【问题标题】:lighttpd/fastcgi/python errors in logs日志中的 lighttpd/fastcgi/python 错误
【发布时间】:2023-07-22 12:37:01
【问题描述】:

我在 Lighttpd 上运行一个 web.py 应用程序并注意到 ajax 请求偶尔会失败(有时它们很好,有时不是) - 所以我查看了错误日志,发现它充满了这个:

2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr: Traceback (most recent call last):
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr:   File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 237, in process
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr:     return p(lambda: process(processors))
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr:   File "/usr/local/lib/python2.7/dist-packages/web/session.py", line 85, in _processor
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr:     self._load()
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr:   File "/usr/local/lib/python2.7/dist-packages/web/session.py", line 106, in _load
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr:     d = self.store[self.session_id]
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr:   File "/usr/local/lib/python2.7/dist-packages/web/session.py", line 250, in __getitem__
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr:     return self.decode(pickled)
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr:   File "/usr/local/lib/python2.7/dist-packages/web/session.py", line 210, in decode
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr:     return pickle.loads(pickled)
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr: EOFError

以前有人遇到过这些错误吗?

【问题讨论】:

  • 我认为看看代码(至少是 Ajaxed 部分)会有所帮助

标签: python lighttpd web.py fastcgi


【解决方案1】:

编辑这个文件:/usr/local/lib/python2.7/dist-packages/web/session.py

import threading
lock = threading.Lock()                                                          


class DiskStore(Store): 
     .......
     .......

     def __getitem__(self, key):                                                  
         path = self._get_path(key)                                               
         if os.path.exists(path):                                                 
             lock.acquire()                                                       
             f = open(path)                                                       
             try:                                                                 
                 pickled = f.read()
                 return self.decode(pickled)                                      
             finally:                                                             
                 f.close()                                                        
                 lock.release()                                                   
         else:                                                                    
             raise KeyError, key                                                  

     def __setitem__(self, key, value):                                           
         path = self._get_path(key)                                               
         pickled = self.encode(value)                                             
         try:                                                                     
             lock.acquire()                                                       
             f = open(path, 'w')                                                  
             try:                                                                 
                 f.write(pickled)                                                 
             finally:                                                             
                 f.close()                                                        
                 lock.release()                                                       
         except IOError:                                                          
             lock.release()                                                       
             pass   


2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr: Traceback (最近一次通话最后):
2014-07-02 17:22:33:(mod_fastcgi.c.2673)FastCGI-stderr:文件“/usr/local/lib/python2.7/dist-packages/web/application.py”,行237,处理中
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr: return p(lambda: process(processors))
2014-07-02 17:22:33:(mod_fastcgi.c.2673)FastCGI-stderr:文件“/usr/local/lib/python2.7/dist-packages/web/session.py”,行85,在_处理器中
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr: self._load()
2014-07-02 17:22:33:(mod_fastcgi.c.2673)FastCGI-stderr:文件“/usr/local/lib/python2.7/dist-packages/web/session.py”,行106,在_load中
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr: d = self.store[self.session_id]
2014-07-02 17:22:33:(mod_fastcgi.c.2673)FastCGI-stderr:文件“/usr/local/lib/python2.7/dist-packages/web/session.py”,行250,在 getitem
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr: return self.decode(pickled)
2014-07-02 17:22:33:(mod_fastcgi.c.2673)FastCGI-stderr:文件“/usr/local/lib/python2.7/dist-packages/web/session.py”,行210,在解码中
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr: 返回 pickle.loads(pickled)
2014-07-02 17:22:33: (mod_fastcgi.c.2673) FastCGI-stderr: EOFError

【讨论】:

    最近更新 更多