4
我已經安裝了Python 3的嵌入式系統(ARMv5tejl AT91SAM9X25,運行基於buildroot的rootfs的128MB RAM)。我已經讓系統運行了很多天,並且我已經開始對它進行一些python開發工作,但似乎遇到了創建新線程的問題。Python無法啓動新線程,但沒有啓動線程限制
如果我嘗試運行下面的程序:
Type "help", "copyright", "credits" or "license" for more information.
>>> import threading
>>> import time
>>> def func():
... i = 0
... while True:
... i += 1
... print(i)
... time.sleep(1)
...
>>>
>>> func()
1
2
3
^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 6, in func
KeyboardInterrupt
>>> t = threading.Thread(target=func)
>>> t.start()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.4/threading.py", line 850, in start
RuntimeError: can't start new thread
>>>
正如你所看到的,試圖啓動線程的時候,我得到上述錯誤。在線初步搜索似乎表明問題可能是由於系統運行到線程限制。這裏的ulimit -a的輸出:
# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 961
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 961
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
使用this method,線程我的系統上的總數爲75,這是遠遠低於961這裏限制是我目前的內存狀態:
# free -m
total used free shared buffers cached
Mem: 120 118 2 60 0 65
-/+ buffers/cache: 52 67
Swap: 0 0 0
我也運行內存壓縮機運行echo 1 > /proc/sys/vm/compact_memory
。
我想如果我重新啓動設備(因爲代碼是已知的工作代碼),一切都會正常工作,但由於我現在有設備處於此狀態,所以我很想嘗試瞭解問題是什麼。
線程無疑是啓用的,因爲我在使用線程的單元上編寫了Python軟件。這就是現在,運行該軟件失敗,因爲解釋器無法創建線程。 –
我想知道OP是否解決過這個問題? – holdenweb