コードをコピーします コードは次のとおりです:
# !/usr /bin/env python
# -*-coding: UTF-8 -*-
インポートログ
インポートキュー
インポートスレッド
def func_a( a, b ):
return a + b
def func_b():
pass
def func_c(a, b, c):
return a, b , c
# 非同期タスクキュー
_task_queue = queue.Queue()
def async_call(function, callback, *args, **kwargs):
_task_queue.put( {
'function': function,
'callback': コールバック,
'args': args,
'kwargs': kwargs
})
def _task_queue_consumer( ):
"""
非同期タスク キュー コンシューマー
"""
while True:
try:
task = _task_queue.get()
function = task.get (' 関数 ')
コールバック = Task.get (' コールバック ')
ARGS = TASK.GET (' ARGS ')
KWARGS = TASK.GET (' KWARGS ')
if callback:
callback(function(*args, **kwargs))
ex としての例外を除く:
if callback:
callback(ex)
finally:
_task_queue.task_done ()
例外を除く 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)
_t ask_queue .join()