Python多線程非同步任務隊列

來源:互聯網
上載者:User
很多情境為了不阻塞,都需要非同步回調機制。這是一個簡單的例子。

python的多線程非同步常用到queue和threading模組

#!/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  # 非同步任務隊列_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)    async_call(func_c, handle_result, 1, 2, 3, 4)      _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.