@DTPlayer

Как решить проблему с многопоточностью?

def new_therad(eth_list, all_string, count):
    list_all = []
    for i in range(len(eth_list)):
        if eth_list[i] in blacklist:
            continue
        list_all.append(Thread(target=get_data, args=(eth_list[i], all_string[i])))
        blacklist.append(eth_list[i])
        if len(list_all) == count:
            print('Собрано нужное количество потоков, запуск')
            for i in range(len(list_all)):
                loop.run_until_complete(run_thread(list_all[i], i+1))
        if len(blacklist) == MainFileLen.count:
            pass
        else:
            new_therad(eth_list, all_string, count)

Вот функция, blacklist изначально пустой
async def run_thread(thread, num):
    thread.start()
    thread.join()
    print(f'Поток номер {num} завершен')

При первом запуске все нормально, но на втором запросе функции начинает добавлять 100+ потоков, в итоге ошибка о нехватке записей в массиве. В многопоточности недавно, хотел бы узнать как это решить.
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
@DTPlayer Автор вопроса
Спасибо тем, кто помог, теперь код выглядит так:
def new_therad(eth_list, all_string, count):
    for i in range(len(eth_list)):
        if threading.active_count() == count-1:
            time.sleep(1)
        flow1 = Thread(target=get_data, args=(eth_list[i], all_string[i]), daemon=True)
        flow1.start()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы