ok
選擇您的語系

同步和非同步

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)

  1. 第一個 move_body 是非同步函數。你可以從 on_state_chang callback中獲取結果。它處理第二個 move_body (serial:2) 並立即回傳 PENDING。
  2. 第二個 move_body 是同步函數。你可以得到回傳的結果。
    • 結果類型是位元組。 (2, {'state': 4, 'error': 33554548})
    • 第一個元素是序列號
    • 第二個元素是字典。這個字典包括“狀態”和“錯誤”
    • 狀態 = {0:'初始',1:'待定',2:'拒絕',3:'活動',4:'失敗',5:'成功',6:'搶占',}
    • 您可以通過 py_zenbo_sdk.modules.error_code 獲取錯誤描述。

另一方面,可以設置超時參數來設定函數的結束時間,它會在超時時取消操作。

Go To Top