Python多线程异步任务队列

系统 1775 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()
            
          

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论