Python Infinite Integers
Python 3整数具有无限精度。 在实践中,这受到计算机内存的限制。
考虑以下代码:
1 2 3 | i = 12345 while True: i = i * 123 |
这显然会失败。 但结果会是什么呢? 整个RAM(和页面文件)填充了这个整数(除了其他进程占用的空间)?
或者在它到达那么远之前是否有保护措施?
你可以检查一下会发生什么,而不用担心填满所有可用的内存。 您可以明确设置内存限制:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #!/usr/bin/env python import contextlib import resource @contextlib.contextmanager def limit(limit, type=resource.RLIMIT_AS): soft_limit, hard_limit = resource.getrlimit(type) resource.setrlimit(type, (limit, hard_limit)) # set soft limit try: yield finally: resource.setrlimit(type, (soft_limit, hard_limit)) # restore with limit(100 * (1 << 20)): # 100MiB # do the thing that might try to consume all memory i = 1 while True: i <<= 1 |
此代码消耗100%CPU(在单个内核上),消耗的内存增长非常缓慢。
原则上,你应该在某个时候得到
您的特定代码不应该触发它,但一般情况下,如果您尝试构造大于