Function: launch_callback
Applicability
|
Product |
Supported (√/x) |
|---|---|
|
|
√ |
|
|
√ |
|
|
√ |
|
|
√ |
|
|
√ |
Function Usage
Delivers a callback task in the task queue of the stream in the asynchronous task scenario. When the callback task is executed in the system, it is also executed in the thread subscribed to on the stream (acl.rt.subscribe_report). This API is asynchronous.
- Create a thread. Once acl.rt.process_report in the thread function is called to set the timeout interval (cyclic calling is required), acl.rt.launch_callback will deliver a callback task after a period of time.
- Call acl.rt.subscribe_report to bind the thread created in Step 1 to the stream. The callback task delivered by the stream is executed in the bound thread.
- Execute an asynchronous job (for example, an asynchronous inference job) on the specified stream.
- Define and implement the callback function, call acl.rt.launch_callback to deliver a callback task in the task queue of the stream, and trigger the thread to process the callback function subscribed by acl.rt.subscribe_report. Each time acl.rt.launch_callback is called, a callback task is delivered.
- Call acl.rt.unsubscribe_report to unsubscribe from threads and unbind threads from streams after all asynchronous tasks are executed.
Prototype
- C Prototype
1aclError aclrtLaunchCallback(aclrtCallback fn, void *userData, aclrtCallbackBlockType blockType, aclrtStream stream)
- Python Function
1ret = acl.rt.launch_callback(fn, user_data_list, block_type, stream)
Parameter Description
|
Parameter |
Description |
|---|---|
|
fn |
Function, callback function on the Python side. |
|
user_data_list |
List, parameters to be transferred to the callback function. Currently, data of the list type is transferred. |
|
block_type |
Int, whether the callback task blocks subsequent tasks in the stream.
|
|
stream |
Int, stream. |
Return Value Description
|
Return Value |
Description |
|---|---|
|
ret |
Int, error code: 0 on success; else, failure. |
Restrictions
This API is asynchronous. The API call delivers a task rather than executes a task. After this API is called, call the synchronization API (for example, acl.rt.synchronize_stream) to ensure that the task is complete.