代码之家  ›  专栏  ›  技术社区  ›  Davi A. Sampaio

使用pytube的多线程没有性能奖励

  •  0
  • Davi A. Sampaio  · 技术社区  · 2 年前

    我正在使用pytube库来检索YouTube视频列表的流信息。我已经使用一个简单的循环以及用于多线程的concurrent.futures和多处理库实现了流的检索。然而,我并没有看到我所期望的性能提升,所有方法都需要大约130秒才能运行。

    我使用的代码如下:

    def _get_streams(self, yt: pytube.YouTube):
        return yt.streams
    
    @print_execution_time
    def get_streams_futures(self):
        with concurrent.futures.ThreadPoolExecutor() as executor:
            future_results = [executor.submit(self._get_streams, yt) for yt in self._create_yt_obj()]
            result = [future.result() for future in concurrent.futures.as_completed(future_results)]
        return result
    
    
    @print_execution_time
    def get_streams_linear(self):
        return [yt.streams for yt in self._create_yt_obj()]
    
    
    @print_execution_time
    def get_streams_multiprocessing(self):
        with multiprocessing.Pool() as pool:
            result = pool.map(self._get_streams, self._create_yt_obj())
    
        return result
    

    @print_execution_time 是一个简单的装饰器,用于计算函数的运行时间

    我期望多线程方法比循环方法运行得更快,但事实并非如此。有人能解释为什么会发生这种情况,以及可以做些什么来实现所需的性能提升吗?

    没有出现错误

    0 回复  |  直到 2 年前