Я работаю над кодом Python, используя многопроцессорность.Ниже приведен код
import multiprocessing
import os
def square(n):
#logger.info("Worker process id for {0}: {1}".format(n, os.getpid()))
logger.info("Evaluating square of the number {0}".format(n))
print('process id of {0}: {1}'.format(n,os.getpid()))
return (n * n)
if __name__ == "__main__":
# input list
mylist = [1, 2, 3, 4, 5,6,7,8,9,10]
# creating a pool object
p = multiprocessing.Pool(4)
# map list to target function
result = p.map(square, mylist)
print(result)
Количество ядер ЦП на моем сервере равно 4. Если я использую 4, запускается только один процесс.В общем, он должен запустить 4 отдельных процесса, верно?
Если я установлю значение 8 в объекте пула ниже, это ответ, который я получил
process id of 1: 25872
process id of 2: 8132
process id of 3: 1672
process id of 4: 27000
process id of 6: 25872
process id of 5: 20964
process id of 9: 25872
process id of 8: 1672
process id of 7: 8132
process id of 10: 27000
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Это запустило 5 отдельных процессов (25872,8132,1672,27000,20964), хотя имеется только 4 ядра ЦП.
Я не понимаю, почему пул инициировал только 1 процесс, когда значение равно 4 и инициировано5 отдельных процессов, когда значение равно 8.
Можно ли создать экземпляр объекта пула со значением, превышающим количество ядер ЦП?
ТакжеКакое оптимальное значение мы должны использовать при создании объекта пула, если список содержит миллион записей?
Я прошел официальную документацию по Python, но не смог найти информацию.Пожалуйста, помогите