同步和非同步
PyZenbo SDK 為大部分功能提供同步和非同步參數。預設值為同步。
- 同步:等待函數完成並返回值
- 異步:不等待並處理下一個函數。結果透過Callback回傳
如何使用非同步Callback?
與 Java 中的 ZenboSDK 相同,有兩個callback函數。
- on_state_change:獲取函數回傳,包括狀態和錯誤代碼
- on_result: 獲取函數結果的值
範例程式碼:move_body.py
打開 PyZenbo/tests/move_body.py
import pyzenbo
from pyzenbo.modules.error_code import code_to_description
host = '192.168.0.186'
sdk = pyzenbo.connect(host)
def on_state_change(*args):
serial, cmd, error, state = args
msg = 'on_state_change serial:{}, cmd:{}, error:{}, state:{}'
print(msg.format(serial, cmd, error, state))
print('on_state_change error:', code_to_description(error))
def on_result(*args):
print('on_result', args)
sdk.on_state_change_callback = on_state_change
sdk.on_result_callback = on_result
result = sdk.motion.move_body(10, 0, 0, sync=False, timeout=None)
print(result)
result = sdk.motion.move_body(10, 0, 0, sync=True, timeout=100)
print(result)
- 第一個 move_body 是非同步函數。你可以從 on_state_chang callback中獲取結果。它處理第二個 move_body (serial:2) 並立即回傳 PENDING。
- 第二個 move_body 是同步函數。你可以得到回傳的結果。
- 結果類型是位元組。 (2, {'state': 4, 'error': 33554548})
- 第一個元素是序列號
- 第二個元素是字典。這個字典包括“狀態”和“錯誤”
- 狀態 = {0:'初始',1:'待定',2:'拒絕',3:'活動',4:'失敗',5:'成功',6:'搶占',}
- 您可以通過 py_zenbo_sdk.modules.error_code 獲取錯誤描述。
另一方面,可以設置超時參數來設定函數的結束時間,它會在超時時取消操作。