Python非同步任務隊列

來源:互聯網
上載者:User

很多情境為了不阻塞,都需要非同步回調機制。這是一個簡單的例子。

#!/usr/bin/env python# -*- coding: UTF-8 -*-import loggingimport queueimport threadingdef func_a(a, b):    return a + bdef func_b():    passdef 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': callback,        'args': args,        'kwargs': kwargs    })def _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)        _task_queue.join()

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.