Many scenarios require an asynchronous callback mechanism for non-blocking. This is a simple example.
Python's multithreaded asynchronous common to queue and threading modules
#!/usr/bin/env python#-*-coding:utf-8-*-import loggingimport queueimport 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, ' CA Llback ': Callback, ' args ': args, ' Kwargs ': Kwargs}) def _task_queue_consumer (): "" "Asynchronous task queue consumer "" "While True:try:task = _task_queue.get () function = Task.get (' function ') c Allback = 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 () E Xcept Exception as Ex:logging.warning (exdef 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 ()