В настоящее время я экспериментирую с Actor-concurreny (на Python), потому что хочу узнать больше об этом. Поэтому я выбрал pykka
, но когда я его тестирую, это больше, чем наполовину, как медленно как обычная функция.pykka - Актеры медленные?
Код должен только смотреть, если он работает; он не должен быть элегантным. :)
Возможно, я сделал что-то неправильно?
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()
Это работает не так быстро:
time python actor.py
real 0m8.319s
user 0m8.185s
sys 0m0.140s
А теперь манекен 'нормальный' функция:
def foo(i):
l = []
for j in i:
l.append(j+1)
return l
if __name__ == '__main__':
data = np.random.random(1000000)
foo(data)
дает этот результат:
real 0m3.665s
user 0m3.348s
sys 0m0.308s
И как я могу сделать это эффективным? Я сделал кортеж из numpy-массива, но коэффициент усиления не очень высок. (Например: распределите цикл эффективнее над серверными участниками.) – Themerius
Я обновил свой ответ. В принципе, это сложнее разрабатывать, но имеет больше преимуществ, таких как выполнение над кластером машин. –
Спасибо, я сейчас пытаюсь что-то построить. – Themerius