ipyparallel的LoadBalancedView内存膨胀,如何避免这种情况?

2024-05-13 01:24:09 发布

您现在位置:Python中文网/ 问答频道 /正文

此问题可能与https://github.com/ipython/ipyparallel/issues/207有关,该问题也尚未标记为已解决。
我也在这里打开了这一期https://github.com/ipython/ipyparallel/issues/286

我想在jupyter笔记本中使用python和ipyparallel并行执行多个任务,并通过在本地控制台中执行ipcluster start来使用4个本地引擎。 除了可以使用DirectView之外,我使用LoadBalancedView来映射一组任务。每个任务大约需要0.2秒(可能会有所不同),每个任务都会执行一个MySQL查询,在那里加载一些数据,然后进行处理。
处理大约45000个任务可以很好地工作,但是,我的记忆力增长得非常快。这实际上很糟糕,因为我想用超过660000个任务运行另一个实验,因为这会使我16GB的内存限制膨胀,然后本地驱动器上的内存交换就开始了。但是,当使用DirectView时,我的内存会变得相对较小,并且永远不会满。但我实际上需要LoadBalancedView
即使在运行一个没有数据库查询的最小工作示例时,也会发生这种情况(见下文)。在

我不太熟悉ipyparallel库,但我读过一些关于ipcontroller所做的日志和缓存的文章,这可能会导致这个问题。我仍然不确定这是一个错误还是我可以改变一些设置来避免我的问题。在

运行MWE

对于运行在Windows 10上的Python3.5.3环境,我使用以下(最新)软件包:

  • ipython 6.1.0版
  • ipython_Genuils 6.1.0版
  • IPY平行6.0.2
  • jupyter 1.0.0版
  • jupyter_客户端4.4.0
  • jupyter_控制台5.0.0
  • jupyter_核心4.2.0

我希望下面的例子适用于LoadBalancedView而不需要巨大的内存增长(如果可能的话):

  • 在控制台上启动ipcluster start
  • 运行一个包含以下三个单元格的jupyter笔记本:

    <1st cell>
    import ipyparallel as ipp
    rc = ipp.Client()
    lview = rc.load_balanced_view()
    
    <2nd cell>
    %%px --local
    import time
    
    <3rd cell>
    def sleep_here(i):
        time.sleep(0.2)
        return 42
    
    amr = lview.map_async(sleep_here, range(660000))
    amr.wait_interactive()
    

Tags: 内存httpsgithubcomipythoncell笔记本jupyter