• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python多线程异步任务队列(实例)

python 搞java代码 3年前 (2022-05-24) 26次浏览 已收录 0个评论

很多场景为了不阻塞,都需要异步回调机制。这是一个简单的例子。

python多线程异步常用到queue和threading模块

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
 
import logging
import queue
import 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()

www#gaodaima.com来源gaodai$ma#com搞$$代**码网搞代码

来源:搞代码网:原文地址:https://www.gaodaima.com


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python多线程异步任务队列(实例)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址