Asynchronous callback is required in many scenarios to avoid blocking. This is a simple example for your reference.
Copy codeThe Code is as follows:
#! /Usr/bin/env python
#-*-Coding: UTF-8 -*-
Import logging
Import queue
Import threading
Def func_a (a, B ):
Return a + B
Def func_ B ():
Pass
Def func_c (a, B, c ):
Return a, B, c
# Asynchronous task queue
_ Task_queue = queue. Queue ()
Def async_call (function, callback, * args, ** kwargs ):
_ Task_queue.put ({
'Function': function,
'Callback': callback,
'Args ': args,
'Wargs': kwargs
})
Def _ task_queue_consumer ():
"""
Asynchronous task queue consumer
"""
While True:
Try:
Task = _ task_queue.get ()
Function = task. get ('function ')
Callback = task. get ('callback ')
Args = task. get ('args ')
Kwargs = task. get ('wargs ')
Try:
If callback:
Callback (function (* args, ** kwargs ))
Failed t Exception as ex:
If callback:
Callback (ex)
Finally:
_ Task_queue.task_done ()
Failed t Exception as ex:
Logging. warning (ex)
Def handle_result (result ):
Print (type (result), result)
If _ name _ = '_ main __':
T = threading. Thread (target = _ task_queue_consumer)
T. daemon = True
T. start ()
Async_call (func_a, handle_result, 1, 2)
Async_call (func_ B, handle_result)
Async_call (func_c, handle_result, 1, 2, 3)
Async_call (func_c, handle_result, 1, 2, 3, 4)
_ Task_queue.join ()