Many scenarios require an asynchronous callback mechanism in order not to block. This is a simple example, we refer to the use of the bar
Copy Code code 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 queues
_task_queue = queue. Queue ()
Def async_call (function, callback, *args, **kwargs):
_task_queue.put ({
' function ': function,
' Callback ': Callback,
' args ': args,
' Kwargs ': 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 (' Kwargs ')
Try
If callback:
Callback (function (*args, **kwargs))
Except Exception as ex:
If callback:
Callback (ex)
Finally
_task_queue.task_done ()
Except 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 ()