gpt4 book ai didi

python - pykka -- Actor 很慢?

转载 作者:太空狗 更新时间:2023-10-29 21:25:00 24 4
gpt4 key购买 nike

我目前正在试验 Actor-concurreny(在 Python 上),因为我想了解更多相关信息。因此我选择了 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

最佳答案

所以这里发生的是你的功能版本正在创建两个非常大的列表,这是大部分时间。当您引入 actor 时,像列表这样的可变数据必须在发送之前复制给 actor 以保持适当的并发性。此外,当发送回发件人时,也必须复制在参与者内部创建的列表。这意味着我们创建了四个非常大的列表,而不是创建两个非常大的列表。

考虑设计一些东西,以便数据由参与者构建和维护,然后通过调用参与者来查询,从而最大限度地减少来回传递的消息的大小。尝试应用最小数据移动原则。在函数式情况下传递列表是有效的,因为数据实际上并没有移动以利用共享内存空间。如果参与者在不同的机器上,即使消息数据不可变且不需要复制,我们也无法享受共享内存空间的好处。

关于python - pykka -- Actor 很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8339348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com