Как убедиться, что подпроцесс Popen распределяет созданные экземпляры по многим ядрам ЦП оптимальным способом в Windows? - PullRequest
1 голос
/ 09 мая 2020

Я программирую для windows, и в моем приложении python 3 я использую подпроцесс Popen для запуска около 32 экземпляров приложения.

теперь позволяет сказать, что у меня 32-ядерный процессор, будет ли операционная система Windows автоматически распределять экземпляры по ядрам оптимальным образом? или мне нужно указать какой-либо флаг в Popen или сделать что-то еще для этого?

В основном я хочу дать этим 32 экземплярам максимально возможный приоритет и убедиться, что эти 32 экземпляра приложение использует ядра наилучшим образом, и, например, если у меня 32 ядра, ни один из двух экземпляров не должен go в одном ядре , я просто не уверен, как я могу этого добиться?

1 Ответ

0 голосов
/ 09 мая 2020

Я считаю, что решением для вашего мышления будет Pool () в многопроцессорной обработке в Python. Пожалуйста, прочтите документацию здесь, https://docs.python.org/3/library/multiprocessing.html, для получения подробной информации.

По сути, объект Pool предлагает удобный способ распараллеливания выполнения функции (в вашем случае мы скажем application) по нескольким входным значениям, распределяя входные данные по процессам (параллелизм данных).

Ниже приведен пример фрагмента, который можно использовать для создания N параллельных процессов, которые будут равномерно распределены по всем ядрам CPU.

import datetime
from multiprocessing import Pool
import time

def init_application(x):
    time.sleep(2)
    # Initiate your application here, which will be added to the pool for processing.
    print(datetime.datetime.now())
    return x*x

if __name__ == '__main__':
    p = Pool()  # Distributes to all available CPU cores
    print(p.map(init_application, range(10)))

Надеюсь, это проясняет ваши сомнения. Кроме того, приведенный выше фрагмент является примером реализации Pool () в python. Пожалуйста, измените в соответствии с вашими требованиями.

Спасибо, AG

...