日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python?rpyc客戶端調用服務端方法的注意說明_python

作者:Riven_h ? 更新時間: 2022-08-11 編程語言

python rpyc客戶端調用服務端方法

使用rpyc遇到兩個問題:

問題1

client調用server的exposed_xxxx()方法時傳進去的參數類型,到了server端會改變,

打印出來是<netref class 'rpyc.core.netref.type'>類型,與原來傳進的類型不同

解決方法:

def exposed_clentA_will_use(self, hello):
? ? hello = rpyc.classic.obtain(hello)

這樣就把傳進來的hello轉變為本地類型,如果本地沒有這種類型,需要創建這種類型

比如傳進來的是<class 'numpy.ndarray'>類型,但是server本地沒有,則需要import numpy

問題2

client調用server的方法時有報錯ValueError: pickling is disabled

解決方法:

rpyc_config = rpyc.core.protocol.DEFAULT_CONFIG
rpyc_config['allow_pickle'] = True?
host_ip = '127.0.0.1'?
conn = rpyc.connect(host_ip, port = 33333, config = rpyc_config)

由于是不安全的協議,需要手動允許pickle

字面意思也明確了:allow_pickle

python rpyc的使用心得

6月份,在公司做APP和Web自動化測試開發,碰到一個比較棘手的問題是:APP需要和Web一起操作才能走完整個測試流程。

但是APP和Web使用的是不同的測試工具,Appium和Selenium,測試框架也是獨立的。如何把二者整合起來呢?

沒錯,python rpyc模塊派上用場了,這里使用python rpyc對Web頁面相關的操作做了二次封裝。

from rpyc import Service
from rpyc.utils.server import ThreadedServer
class MyService(Service):
? ? def exposed_bid(xxx):
? ? ? ? back_page.bid(xxx)

s=ThreadedServer(MyService,port=12233,listener_timeout=300,auto_register=False)
s.start()

在APP自動化測試腳本里面,這樣調用即可:

c = rpyc.connect('localhost',12233)
c.root.bid(xxxx)

但是在APP測試腳本運行過程中,會出現rpyc調用超時的情況,這是因為rpyc默認的調用等待時間只有30s,如果某些rpyc調用的等待時間超過30s就會報錯,解決方法很簡單,在rpyc包的protocol.py文件中找到
SYNC_REQUEST_TIMEOUT,改大即可。

原文鏈接:https://blog.csdn.net/Riven_h/article/details/117519846

欄目分類
最近更新