Python очень медленно, чтобы начать 100 потоков - PullRequest
1 голос
/ 31 января 2020

Я пытаюсь использовать потоки в 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 за другим. Задача выполнить довольно простой расчет, который нужно повторять вечно.

...