zoukankan      html  css  js  c++  java
  • gevent动态随时添加任务

     保持和py的Threadpoolexecutor一样的submit 方法名,是程序更容易在两种模式之间切换。

    
    
    class GeventPoolExecutor(LoggerMixin):
    def __init__(self, max_works, ):
    self._q = JoinableQueue(maxsize=max_works)
    # self._q = Queue(maxsize=max_works)
    for _ in range(max_works):
    gevent.spawn(self.__worker)
    atexit.register(self.__atexit)

    def __worker(self):
    while True:
    fn,args,kwargs = self._q.get()
    try:
    fn(*args,**kwargs)
    except Exception as exc:
    self.logger.exception(f'函数 {fn.__name__} 中发生错误,错误原因是 {type(exc)} {exc} ')
    finally:
    pass
    self._q.task_done()

    def submit(self, fn:Callable,*args,**kwargs):
    self._q.put((fn,args,kwargs))

    def __atexit(self):
    self.logger.critical('想即将退出程序。')
    self._q.join()
     
  • 相关阅读:
    Java并发编程
    Git
    Spring Boot
    IDEA工具
    Java基础
    数据库架构
    设计模式
    网络基础
    管理知识
    linux安装数据库mysql
  • 原文地址:https://www.cnblogs.com/ydf0509/p/7210950.html
Copyright © 2011-2022 走看看