ホームページ >バックエンド開発 >Python チュートリアル >Pythonの非同期タスクキューの例

Pythonの非同期タスクキューの例

WBOY
WBOYオリジナル
2016-06-16 08:44:421388ブラウズ

多くのシナリオでは、ブロックされないように非同期コールバック メカニズムが必要です。簡単な例ですので参考にしてください

コードをコピーします コードは次のとおりです:

# !/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()
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。