简单介绍

  1. gevent 基本概念:
       调度器: hub
              上下文切换管理: switch
              主循环: loop
       协程: greenlet
  2. gevent 特性:
        优点:
                高效,实现简单,易维护
        缺点:
                和go不一样,并不是python原生支持的功能,所以使用起来难免会踩一些坑,但是由于并不是实现方式有问题,所以存在着点弊病并没有什么问题。

开始使用

  1. 什么情况下可以使用:
        足够了解自己服务所使用的io,  写的代码足够规范,否则会出现出了问题都不知道那里有问题。
        需要并行化的代码不能阻塞时间过长,否则没有意义。
        存在大量的io, 前提是可以变成非阻塞的,否则不能满足条件2。
  2. 由于发现api的代码满足以上三条,所以开始进行优化:
    第一版代码如下:
           

    class ParallelTask(object):
        def __init__(self, timeout=5):
            # 覆盖python原生的socket
            gevent.monkey.patch_socket()
            self.timeout = timeout
            self.task = []
     
        def taskAppend(self, task, *args):
            self.task.append(gevent.spawn(task, *args))
     
        def run(self):
            errno, err_msg = get_error(AwemeStatus.SUCCESS)
            try:
                gevent.joinall(self.task, timeout=self.timeout)
                return errno, err_msg
            except Exception, ex:
                logger.exception("[ParallelTask] run task fail error=%s" % ex)
                errno, err_msg = get_error(AwemeStatus.REE_PARALLEL_TASK)
                return errno, err_msg

相关文章:

  • 2021-09-19
  • 2021-08-15
  • 2021-05-29
  • 2021-12-26
  • 2022-01-12
  • 2022-01-12
  • 2021-06-26
  • 2022-02-13
猜你喜欢
  • 2022-01-06
  • 2021-07-31
  • 2022-12-23
  • 2022-12-23
  • 2021-08-19
  • 2021-11-30
  • 2022-01-16
相关资源
相似解决方案