Я пытаюсь использовать потоки в python.
Мне нужно, чтобы каждый поток вызывал одну и ту же функцию (которая использует while (True) l oop) с другим аргументом.
Итак, в этом примере я создаю 81 объект (трейдер) и добавляю их все в список (трейдеры). Затем я использую библиотеку concurrent.futures для запуска своих потоков.
'exec_strats' - это функция, которая использует while (True) l oop.
for ma_range in range(10, 200, 10):
for overhead in range(1, 10, 1):
trader = Trader(id=str(ma_range)+':'+str(overhead))
header.append(trader.id)
args = [trader, ma_range, overhead]
trader.add_strat(exec_strat_sec, args)
traders.append(trader)
start = time.time()
result = concurrent.futures.ThreadPoolExecutor(max_workers=len(traders)).map(exec_strats, traders)
end = time.time()
print("Time for "+str(len(traders))+" threads to start : " + str(end - start) + " seconds")
Для запуска 9 потоков , это займет около 3 секунд. Чтобы запустить 100 потоков, около 5 минут.
Может кто-нибудь объяснить мне, если есть проблема с моим кодом, или я просто не должен использовать python для такого рода многопоточности и почему?
РЕДАКТИРОВАТЬ 1
Спасибо за быстрые ответы,
Чтобы уточнить, мне нужно только 1 работник на задачу, но мне нужно, чтобы все работали одновременно, а не 1 за другим. Задача выполнить довольно простой расчет, который нужно повторять вечно.