Actualmente estoy experimentando con Actor-concurreny (en Python), porque quiero aprender más sobre esto. Por lo tanto, elegí pykka
, pero cuando lo pruebo, es más de la mitad de lo lento como una función normal.pykka - ¿Los actores son lentos?
El código es solo para ver si funciona; no está destinado a ser elegante. :)
Tal vez hice algo mal?
from pykka.actor import ThreadingActor
import numpy as np
class Adder(ThreadingActor):
def add_one(self, i):
l = []
for j in i:
l.append(j+1)
return l
if __name__ == '__main__':
data = np.random.random(1000000)
adder = Adder.start().proxy()
adder.add_one(data)
adder.stop()
Esto no funciona tan rápido:
time python actor.py
real 0m8.319s
user 0m8.185s
sys 0m0.140s
Y ahora el muñeco función 'normal':
def foo(i):
l = []
for j in i:
l.append(j+1)
return l
if __name__ == '__main__':
data = np.random.random(1000000)
foo(data)
da este resultado:
real 0m3.665s
user 0m3.348s
sys 0m0.308s
¿Y cómo podría hacer esto eficiente? Hice una tupla de la matriz numpy, pero la ganancia no es muy alta. (Por ejemplo: distribuir el bucle eficiente entre varios actores). – Themerius
Actualicé mi respuesta. Básicamente es más difícil de diseñar pero tiene más beneficios como la ejecución en un grupo de máquinas. –
Gracias, intento ahora construir algo. – Themerius