Обработка списка в несколько потоков
У меня есть список который необходимо обработать в n тредов. Я написал вот такой скрипт, но это не корректно т.к. тут количество тредов будет равно количеству записей в списке. А вот как сделать n тредов не могу сообразить
import codecs
import os
import threading
def pr(str):
print(str + threading.currentThread().getName())
def soap(id_number):
for number in id_number:
t = threading.Thread(target=pr, args=(number,))
t.start()
if __name__ == '__main__':
id_file = codecs.open(os.path.join(os.path.dirname(os.path.realpath(__file__)), "card.txt"), "r", encoding='utf-8')
lines = id_file.readlines()
id_file.close()
soap(lines)
exit(0)
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
Разбейте список на куски и передавайте в поток кусок:
import threading
def pr(batch):
for el in batch:
print('{}: {}'.format(threading.currentThread().getName(), el))
def soap(id_number, n):
batch_size = (len(id_number) + n - 1) / n
for i in range(0, len(id_number), batch_size):
batch = id_number[i:i+batch_size]
t = threading.Thread(target=pr, args=(batch,))
t.start()
soap([0,1,2,3,4,5,6,7,8,9], 3)