Python 3がインストールされた組み込みシステム(buildrootベースのrootfsを実行する128MB RAMのarmv5tejl AT91SAM9X25)があります。私は数日間システムを稼働させたままにしています。私は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
>>>
をスレッドを開始しようとすると、私は上記のエラーを取得します。いくつかの最初のオンライン検索では、システムがスレッドの限界に達していることが原因である可能性があります。 this methodを使用
# 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
は、私のシステム上のスレッドの合計数は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
ここではulimit -aの出力であります
echo 1 > /proc/sys/vm/compact_memory
を実行してメモリコンパクタも実行しました。
デバイスをリブートすると(コードは動作しているコードなので)すべてうまくいくと思いますが、私は現在この状態のデバイスを持っているので、問題の内容を理解しようとしています。 。
私はスレッドを使用するユニットにPythonソフトウェアを書いているので、スレッドが確実に有効になっています。インタプリタがスレッドを作成できないため、そのソフトウェアを実行するのが失敗しただけです。 –
OPがこれまでにこの問題を解決したのだろうか? – holdenweb