美文网首页
Python ThreadPoolExecutor 默认无界队列

Python ThreadPoolExecutor 默认无界队列

作者: sexy_cyber | 来源:发表于2022-09-27 11:25 被阅读0次
  • python 的线程池,内部默认用的是无界队列,而且不支持传参,感觉这个设计还是蛮蠢的。
  • 我一直以来都以为是有界队列,并且队列长度就是线程池限制的(max_works)的长度
  • 关于有界队列无界对的事情,这个得了解下线程池大概的工作原理

线程池其实有两个模块,一个是队列就是python内置的queue,用来接受任务,并且不限制队列长度,并且不是阻塞的,无线不阻塞的塞;
另外一个模块是有控制的创建子线程,你定义了几个子线程就创建几个,子线程再从这个队列拿任务去工作

解决方案

可以重现线程池类的init方法,将无界队列,改为有界队列

import queue

from concurrent.futures import ThreadPoolExecutor


class ThreadPoolExecutor(ThreadPoolExecutor):
    """
    重写线程池修改队列数
    """
    def __init__(self, max_workers=None, thread_name_prefix=''):
        super().__init__(max_workers, thread_name_prefix)
        # 队列大小为最大线程数的1倍
        self._work_queue = queue.Queue(self._max_workers * 1)

关于定义的队列的长度,大部分文章都是用两倍的关系;但是!一旦线程池挂掉,多丢掉一倍的任务,这个风险很大,感觉没有必要*2

相关文章

网友评论

      本文标题:Python ThreadPoolExecutor 默认无界队列

      本文链接:https://www.haomeiwen.com/subject/bxufartx.html