Мне нужно использовать пул потоков в Python, и я хочу знать, когда закончился хотя бы 1 выход или «максимально допустимые потоки», поэтому я могу запустить его снова, если мне все еще нужно что-то делать.
Я использовал что-то вроде этого:
def doSomethingWith(dataforthread):
dostuff()
i = i-1 #thread has finished
i = 0
poolSize = 5
threads = []
data = #array of data
while len(data):
while True:
if i<poolSize: #if started threads is < poolSize start new thread
dataforthread = data.pop(0)
i = i+1
thread = doSomethingWith(dataforthread)
thread.start()
threads.append(thread)
else:
break
for t in threads: #wait for ALL threads (I ONLY WANT TO WAIT FOR 1 [any])
t.join()
Как я понимаю, мой код открывает 5 потоков, а затем ожидает завершения всех потоков, прежде чем начинать новые потоки, пока данные не будут использованы. Но я действительно хочу запустить новый поток, как только один из потоков завершит работу, и в пуле будет «доступное место» для нового потока.
Я читал это , но я думаю, что это будет иметь ту же проблему, что и мой код (не уверен, я новичок в python, но, глядя на joinAll (), это выглядит так).
Есть ли у кого-нибудь пример, чтобы сделать то, что я пытаюсь достичь?
Я имею в виду обнаружение, как только я <, чем poolSize, запуск новых потоков до i = poolSize и выполнение этого до тех пор, пока данные не будут использованы. </p>