python – rpyc.Service需要10秒才能收到150kB对象(在localhost上,没有局域网问题)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – rpyc.Service需要10秒才能收到150kB对象(在localhost上,没有局域网问题),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1845字,纯文字阅读大概需要3分钟。
内容图文
![python – rpyc.Service需要10秒才能收到150kB对象(在localhost上,没有局域网问题)](/upload/InfoBanner/zyjiaocheng/777/8531bab349b3405ba16db644c4130bed.jpg)
我正在构建一个大的(150kB时腌制)虚拟字典,并在其上运行一个快速平稳运行的虚拟函数.
当通过rpyc.Service公开相同的功能时,即使我的客户端和服务器站在同一主机上,所用的时间也会变为10秒(而不是0.0009秒)(这里没有LAN延迟问题).
知道为什么我的150kB对象需要这么长时间才能从客户端传送到同一主机上的服务器吗?
为什么函数dummy.dummy()被调用,即使输入对象尚未“可用”(如果是,那么在函数中花费的时间在两个测试用例中是相同的)?
以下是我的python(3.2)代码.我测量了在dummy.dummy(d)中花费的时间.
>案例1:客户调用dummy.dummy;执行时间= 0.0009
>案例2:dummy.dummy被称为rpyc服务;执行时间= 10秒
mini_service.py
import rpyc
from rpyc.utils.server import ThreadedServer
import dummy
class miniService(rpyc.Service):
def exposed_myfunc(self,d):
#Test case 2: call dummy.dummy from the service
dummy.dummy(d)
if __name__=='__main__':
t = ThreadedServer(miniService,protocol_config = {"allow_public_attrs" : True}, port = 19865)
t.start()
mini_client.py
import rpyc
import sys
import pickle
import dummy
def makedict(n):
d={x:x for x in range(n)}
return d
if __name__ == "__main__":
d=makedict(20000)
print(sys.getsizeof(d)) #result = 393356
# output = open("C:\\rd\\non_mc_test_files\\mini.pkl",'wb') #117kB object for n=20k
# pickle.dump(d,output)
# output.close()
#RUN1 : dummy.dummy(d) out of rpyc takes 0.00099 seconds
# dummy.dummy(d)
#RUN2 : dummy.dummy(d) via RPYC on localhost takes 9.346 seconds
conn=rpyc.connect('localhost',19865,config={"allow_pickle":True})
conn.root.myfunc(d)
print('Done.')
dummy.py
import time
def dummy(d):
start_ = time.time()
for key in d:
d[key]=0
print('Time spent in dummy in seconds: ' + str(time.time()-start_))
解决方法:
看起来性能损失来自rpyc为保持客户端和服务器之间的对象(通过引用传递)保持同步而完成的工作.
我现在在我的应用程序中做的是创建输入对象的深层副本,然后处理副本,从而模拟传递值机制.
注意:深度复制需要在协议配置参数中设置allow_picke = True.
内容总结
以上是互联网集市为您收集整理的python – rpyc.Service需要10秒才能收到150kB对象(在localhost上,没有局域网问题)全部内容,希望文章能够帮你解决python – rpyc.Service需要10秒才能收到150kB对象(在localhost上,没有局域网问题)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。