Python 找不到cherrypy/dev/uradom(或等效文件)——错误

Python 找不到cherrypy/dev/uradom(或等效文件)——错误,python,session,random,cherrypy,Python,Session,Random,Cherrypy,我正在使用Python 2.5.1运行cherrypy 3.2.0服务器,每隔几天从UI发出的任何指令都会出现以下错误,直到终止并重新启动:- [29/Mar/2012:06:37:57] HTTP Traceback (most recent call last): File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/_cprequest.py", line 636, in respond File

我正在使用Python 2.5.1运行cherrypy 3.2.0服务器,每隔几天从UI发出的任何指令都会出现以下错误,直到终止并重新启动:-

[29/Mar/2012:06:37:57] HTTP Traceback (most recent call last):
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/_cprequest.py", line 636, in respond
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/_cprequest.py", line 97, in run
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/_cprequest.py", line 57, in __call__
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/lib/sessions.py", line 757, in init
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/lib/sessions.py", line 162, in __init__
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/lib/sessions.py", line 190, in _regenerate
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/lib/sessions.py", line 204, in generate_id
File "/usr/lib/python2.5/site-packages/CherryPy-3.2.0-py2.5.egg/cherrypy/_cpcompat.py", line 264, in random20
File "/usr/lib/python2.5/os.py", line 733, in urandom
NotImplementedError: /dev/urandom (or equivalent) not found
\u cpcompat.py
有下面一段代码,这表明在cherrypy无法读取
/dev/uradom
但似乎没有回退的情况下,
random.random
有一个回退

try:
    os.urandom(20)
    import binascii
    def random20():
        return binascii.hexlify(os.urandom(20)).decode('ascii')

except (AttributeError, NotImplementedError):
    import random
    # os.urandom not available until Python 2.4. Fall back to random.random.
    def random20(): 
        return sha('%s' % random.random()).hexdigest()

以下是
os.py
中与上下文相关的代码片段:-


如果不存在(“铀王国”):

def uradom(n):
“Uradom(n)->str
返回适合加密使用的n个随机字节的字符串。
"""
尝试:
_urandomfd=open(“/dev/urandom”,仅限O)
除了(OSError、IOError):
raise NOTEImplementedError(“/dev/uradom(或等效项)未找到”)
bytes=“”
而len(字节)
同时,当cherrypy无法读取
/dev/uradom
时,以下代码段工作正常:-


python-c“导入操作系统;fd=open('/dev/uradom','r');打印fd.read(5);fd.close()

我有两个问题:-

  • 当我能够从/dev/uradom读取随机位时,为什么cherrypy抛出没有实现错误
  • os.py
    引发
    NotImplementedError
    时,为什么
    \u cpcompact.py
    不执行except部分

  • 这不是一个答案,但也许您可以将一些调试代码放入
    os.py
    (我无法想象它会影响使用
    import-os
    的任何其他程序,但值得记住它的自定义代码)

    如果不存在(“Uradom”):
    定义铀(n):
    “Uradom(n)->str
    返回适合加密使用的n个随机字节的字符串。
    """
    尝试:
    _urandomfd=open(“/dev/urandom”,仅限O)
    #调试更改
    除了(OSError、IOError)作为错误:
    导入系统日志
    syslog.syslog(repr(Err))
    #/调试
    raise NOTEImplementedError(“/dev/uradom(或等效项)未找到”)
    bytes=“”
    而len(字节)

    希望这能准确地告诉您错误是什么。(当然,您可以将syslog替换为仅写入文件等)

    这也不是答案,但是,根据我的经验,此NotImplementedError是错误的,但在“太多文件”打开时会出现错误,在多处理进程开始引发未捕获异常后会出现错误,在子线程或子进程中永远悬空

    我将开始进一步调试堆栈,并查看是否有进程抛出的隐藏异常或静默异常

    下面是我开始看到此错误时的堆栈跟踪示例

    Exception in thread Plotter:
    Traceback (most recent call last):
      File "threading.pyc", line 532, in __bootstrap_inner
      File "plotters/edge.pyc", line 459, in run
      AttributeError: 'error' object has no attribute 'error'
    
    OSError: [Errno 24] Too many open files
      File "multiprocessing/connection.pyc", line 150, in Client
      File "multiprocessing/connection.pyc", line 370, in deliver_challenge
        None
      File "os.pyc", line 756, in urandom
    NotImplementedError: /dev/urandom (or equivalent) not found
    

    我的属性错误产生了,最终。。。/URADOM not found imlp错误

    如果您的系统尚未创建/dev/random和/dev/URADOM,则可以使用以下命令创建它们:

    mknod-m644/dev/random c18

    mknod-m644/dev/uradomc19


    chown root:root/dev/random/dev/urandom

    python-c“导入os;打印os.urandom(5)”
    有效吗?遗憾的是,它有效,而cherrypy说/dev/urandom没有实现!也许权限被搞砸了?@haltTm:我不知道,我只是在那里扔了一些东西。我打赌如果你在
    os.py
    中放入一些调试代码来写入syslog(或其他文件)正是例外,这将非常有帮助。我们可以得出的结论是,
    OSError
    IOError
    。这能说明这类错误吗?当我发现下一个错误发生时,我将与您共享结果。另一个重要问题是,为什么
    \u cpcompat.py
    没有执行except部分,即
    导入随机…
    可以使用
    OSError
    IOError
    异常来表示任何a数系统错误。引发的异常对象包含真正有用的特定错误号(权限被拒绝、找不到文件、句柄未打开读取等)。这就是为了更好地理解正在发生的事情而需要捕获的内容。您能帮助我使用python 2.5版本的
    吗,除了(OSError,IOError)as Err
    。现在,我正在做
    ,除了例外,e:
    ,我想这应该有同样的目的。
    错误:(24,'打开的文件太多')
    <代码>/proc/cherrypy_pid/fd/
    显示1049个文件处于打开状态。这是由于我的日志模块有一些错误造成的。顺便说一句,
    ulimit-n
    为我返回10240。我想知道它可以打开的文件数量是否有一个进程限制?@haltTm这可能会有所帮助:否则您可以在
    /etc/security/limits.conf
    中提高系统范围内的限制。但是请记住,如果软件中有一个bug打开但从未关闭它们,那么这只会延长它在句柄用完之前的运行时间。在我的系统上,mod是666。
    if not _exists("urandom"):
        def urandom(n):
            """urandom(n) -> str
    
            Return a string of n random bytes suitable for cryptographic use.
    
            """
            try:
                _urandomfd = open("/dev/urandom", O_RDONLY)
            # debug changes
            except (OSError, IOError) as Err:
                import syslog
                syslog.syslog(repr(Err))
            # /debug
                raise NotImplementedError("/dev/urandom (or equivalent) not found")
            bytes = ""
            while len(bytes) < n:
                bytes += read(_urandomfd, n - len(bytes))
            close(_urandomfd)
            return bytes
    
    Exception in thread Plotter:
    Traceback (most recent call last):
      File "threading.pyc", line 532, in __bootstrap_inner
      File "plotters/edge.pyc", line 459, in run
      AttributeError: 'error' object has no attribute 'error'
    
    OSError: [Errno 24] Too many open files
      File "multiprocessing/connection.pyc", line 150, in Client
      File "multiprocessing/connection.pyc", line 370, in deliver_challenge
        None
      File "os.pyc", line 756, in urandom
    NotImplementedError: /dev/urandom (or equivalent) not found