Can't start new thread python
Программа перебирает 5 тысяч строк. На каждую строку получается запускается 1 новый потоп. Спустя 500-600 строк выдает can't start new thread и перестает работать. Как это решить?
import aminofix
import requests
import time
import threading
from threading import Thread
def gg():
wiki = lines.split(" ")
devic = wiki[2]
device = devic[0:82]
print(device)
client = aminofix.Client(device)
print(wiki[0], wiki[1], wiki[2])
try:
client.login(wiki[0], wiki[1])
print(client.sid)
with open("sid.txt", "a") as file:
sidd = str("sid=")+str(client.sid)
file.writelines(f"{str(sidd)}\n")
except: pass
while True:
with open("accounts.txt", "r+") as file:
for lines in file:
threading.Thread(target=gg).start()
time.sleep(0.1)
Ответы (2 шт):
Автор решения: n1tr0xs
→ Ссылка
Вы создаете слишком много потоков.
Вам нужно подождать, пока место для нового потока освободится.
while True:
with open("accounts.txt", "r+") as file:
for lines in file:
while threading.active_count()>MAX_THREADS:
time.sleep(3)
threading.Thread(target=gg).start()
time.sleep(0.1)
Предварительно нужно будет задать переменной MAX_THREADS приемлемое значие (не больше, чем исполняющая машина позволяет запустить потоков одновременно)
Автор решения: eri
→ Ссылка
Используйте multiprocessing.pool.ThreadPool чтоб создать нужное количество потоков и переиспользовать освободившиеся.
import multiprocessing.dummy
pool = multiprocessing.dummy.Pool(64)
....
def gg(line):
....
....
with open("accounts.txt", "r+") as file:
pool.map(gg, file)