Objeto compartido de multiprocesamiento de Python
En Python, el multiprocesamiento de memoria compartida se compone de la conexión de múltiples procesadores, pero estos procesadores deben tener acceso directo a la memoria principal del sistema. Esto permitirá que todos los procesadores conectados accedan a los otros datos del procesador que han usado o creado.
Usar objetos de memoria compartida de Python en multiprocesamiento
Usando el multiprocesamiento en Python, un nuevo proceso puede ejecutarse de forma independiente y tener su propio espacio de memoria. Al ver los ejemplos a continuación, comprendamos en detalle el multiprocesamiento de objetos compartidos usando Python.
Código de ejemplo:
import multiprocessing
# an empty array globally declared
answer = []
def square_numbers(mynumbers):
# for squaring array elements, a function has been used
global answer
# appending square numbers to a global array
for n in mynumbers:
answer.append(n * n)
# print a global array for generating an answer
print("Answer using first process: {}".format(answer))
if __name__ == "__main__":
# input array
mynumbers = [5, 10, 15]
# new process has been created
p = multiprocessing.Process(target=square_numbers, args=(mynumbers,))
# process begins here
p.start()
# wait unless a process is completed
p.join()
# print a global array for generating an answer
print("Answer using main program: {}".format(answer))
Producción :
Answer using first process: [25, 100, 225]
Answer using main program: []
Hemos impreso respuestas de matriz global en dos lugares utilizando el ejemplo anterior.
El proceso p
se denomina función square_numbers
para que los elementos de la matriz se cambien por el proceso p
en el espacio de memoria.
El programa principal se ejecuta después de que se completa el proceso p
, y obtendremos la matriz vacía como respuesta en el espacio de memoria.
El multiprocesamiento en Python proporciona objetos de valor y una matriz para compartir datos entre múltiples procesos.
Código de ejemplo:
import multiprocessing
def square_data(mydata, answer, square_sum):
# a function has been made for squaring of given data
# appending squares of mydata to the given array
for ix, n in enumerate(mydata):
answer[ix] = n * n
# sum the square values
square_sum.value = sum(answer)
# print array of squared values for process p
print("Answer in process p: {}".format(answer[:]))
# print the sum of squared values for process p
print("Sum of squares values in process p: {}".format(square_sum.value))
if __name__ == "__main__":
# here, we input the data
mydata = [1, 2, 3]
# an array has been created for the int data type for three integers
answer = multiprocessing.Array("i", 3)
# value has been created for int data type
square_sum = multiprocessing.Value("i")
# new process has been created
p = multiprocessing.Process(target=square_data, args=(mydata, answer, square_sum))
# process begins from here
p.start()
# wait unless the process is completed
p.join()
# print an array of squared values for the main program
print("Answer in main program: {}".format(answer[:]))
# print the sum of squared values for the main program
print("Sum of square values in main program: {}".format(square_sum.value))
Producción :
Answer in process p: [1, 4, 9]
Sum of squares in process p: 14
Answer in main program: [1, 4, 9]
Sum of squares in main program: 14
En el ejemplo anterior, creamos una matriz y le pasamos tres enteros. Hemos impreso una matriz de valores al cuadrado y luego una suma de valores al cuadrado para el proceso p
.
Después de esto, nuevamente imprimimos una matriz de valores cuadrados y la suma de valores cuadrados para el programa principal.
Conclusión
Podría haber varias formas de explicar el multiprocesamiento de memoria compartida usando Python. Entonces, en este artículo, explicamos el concepto de memoria compartida de multiprocesamiento de cómo un objeto podría colocarse en el espacio de memoria compartida y ejecutarse de forma independiente.
Aparte de esto, también hemos aprendido que Python permite que los procesos compartan datos entre varios procesos.
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn