Tôi hiện đang thử nghiệm với diễn viên-concurreny (trên Python), bởi vì tôi muốn tìm hiểu thêm về điều này. Vì vậy, tôi đã chọn pykka
, nhưng khi tôi thử nghiệm, nó lớn hơn một nửa là chậm như một hàm bình thường.pykka - Diễn viên chậm?
Mã chỉ để xem liệu nó có hoạt động hay không; nó không có nghĩa là phải thanh lịch. :)
Có thể tôi đã làm điều gì sai?
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()
Đây không phải chạy quá nhanh:
time python actor.py
real 0m8.319s
user 0m8.185s
sys 0m0.140s
Và bây giờ là giả 'bình thường' chức năng:
def foo(i):
l = []
for j in i:
l.append(j+1)
return l
if __name__ == '__main__':
data = np.random.random(1000000)
foo(data)
Cung cấp kết quả này:
real 0m3.665s
user 0m3.348s
sys 0m0.308s
Và làm cách nào để tôi thực hiện điều này một cách hiệu quả? Tôi đã làm một tuple ra khỏi mảng numpy, nhưng đạt được không phải là rất cao. (Ví dụ: phân phối hiệu quả vòng lặp trên các tác nhân chủ.) – Themerius
Tôi đã cập nhật câu trả lời của mình. Về cơ bản nó là khó khăn hơn để thiết kế nhưng nó có nhiều lợi ích hơn như thực hiện trên một cụm máy. –
Cảm ơn bạn, tôi cố gắng để xây dựng một cái gì đó. – Themerius