スレッドを使用して無期限に実行し、数秒ごとにいくつかのものをdbに入れるスクリプトを作成しています。これはうまくいきますが、プロセスのメモリは数秒ごとに少しずつ増加しています。これは、すべてのスレッドオブジェクトを保持するリストが決して空にならないためです。どうすればいい? ジョインはis_alive条件のもとに置かれるため、次のスレッドを生成するまでに時間がかかりません。python3リストからスレッドオブジェクトを削除する方法
AttributeError: 'Thread' object has no attribute 'kill'
import threading
import time
def dicthing(dic, x):
dic.update({x: x*x})
time.sleep(0.01)
dic = {}
threads = []
x = 100
while x > 0:
t = threading.Thread(target = dicthing, args = (dic, x))
threads.append(t)
t.start()
x -= 1
if x % 50 == 0:
print(len(threads), len(threading.enumerate()))
for t in threads:
if t.is_alive() == False:
t.join()
t.kill = True
threads = [t for t in threads if not t.kill]
で以下の例の結果は、Iであることを出力したい:
1 1
1 1
whileループに参加しませんか? –
ループやリストの理解を使用してもはや存在しないスレッドをフィルタリングする –
「x」ごとに新しいスレッドを作成するのではなく、スレッドの固定プール(ThreadPool)を作成し、それらの間で作業を共有することができます。 – 101