#python #concurrent.futures
#питон #параллельные.фьючерсы
Вопрос:
Python 3.10
Я запускаю этот сценарий, используя concurrent.futures
его, чтобы попытаться разместить как можно больше нагрузки на все ядра процессора для теста, который я запускаю.
Пожалуйста, обратите внимание, что эти функции будут выполняться бесконечным циклом до тех пор, пока не будут завершены вручную.
import concurrent.futures num_instances = 100 def func1() try: for i in itertools.count(start=1): p = pow(2,i) print(p) #optional - if you want to see a whole lot of output except KeyboardInterrupt: print("Loop terminated") raise def func2() try: for i in itertools.count(start=1): p = pow(10,i) print(p) #optional - if you want to see a whole lot of output except KeyboardInterrupt: print("Loop terminated") raise with concurrent.futures.ProcessPoolExecutor() as executor: results1 = [executor.submit(func1) for _ in range(num_instances)] results2 = [executor.submit(func2) for _ in range(num_instances)]
Если мое понимание concurrent.futures
верно, этот код, по сути, заменяет необходимость использования любого multiprocessing
синтаксиса в коде.
Однако, когда я запускаю это, я, безусловно, вижу, как активность/процент ядер процессора увеличивается по мере того, как я передаю более высокие числа num_instances
. Но до сих пор я не достигаю такой высокой загрузки процессора, которую я хочу видеть (я пытаюсь понять, сколько нагрузки требуется для максимального использования всех ядер).
От меня не ускользает ирония в том, что обычно это действительно хороший результат, когда вы хотите доказать, что программа работает хорошо :).
Но в моем случае я хочу, чтобы эти ядра работали как можно более «горячими и тяжелыми». Поэтому мой вопрос в том, есть ли что-то еще, что я могу сделать в своем коде, чтобы действительно поднять это на следующий уровень? Является ли то, что я делаю, num_instances
единственным способом добиться этого? Делая это таким образом, я вижу только около 70% общей загрузки процессора.