首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pathos pool语句被挂起

pathos pool语句被挂起
EN

Stack Overflow用户
提问于 2018-06-19 13:46:20
回答 2查看 365关注 0票数 1

我的程序似乎不会超出Pool(5)语句的范围。我在windows服务器上使用python 3.6,64位虚拟机,有8个虚拟CPU。

代码如下

代码语言:javascript
复制
import pathos.multiprocessing as mp
 poolObj = mp.Pool(5)     
 docs = poolObj.map(nlp,textStr)

它在语句池(5)挂起。我也尝试了ProcessingPool(5),同样的结果。

EN

回答 2

Stack Overflow用户

发布于 2018-06-20 11:21:04

我是pathos的作者。首先..。如果您发布了一个代码片段,试图回答您的问题的人可以执行该代码片段,这将有所帮助。这可以帮助您获得更好的答案,因为可以更好地诊断它(在本例中,它可能是序列化问题,或者可能是freeze_support窗口问题,或者可能是构建问题)。

以下是我对了解更多细节的抽象建议:

  • 你有C编译器吗?如果不是,那么您实际上并没有使用pathos打算使用的multiprocess。它是一个具有更多功能的multiprocessing分支。如果答案是否定的,那么你需要安装一个,然后重新构建multiprocess.
  • You不需要在__main__中运行如果你使用的是multiprocess (见上),然而,在windows上,你将需要使用pathos.helpers.freeze_support。在大多数情况下,windows上的池都需要它。
  • 如果以上两个都可以,那么我会检查您的对象是否序列化,并且在windows上,您可以使用dill.check (在dill包中)来确认该对象是否能够正确地为multiprocess进行pickle。

它也可能是以上一个或多个的组合。

票数 1
EN

Stack Overflow用户

发布于 2022-01-18 15:50:14

可能的解释

我遇到了类似的问题,我花了很长时间才明白发生了什么,我最终发现其中一个进程被OOM杀手杀死了,因为它使用了太多的内存。

Pathos无法检测到这一点,正在等待进程完成,尽管它已被终止(并创建了一个新的空闲进程)。

在Ubuntu上,您可以查看内核消息,以确定OOM杀手是否已被触发:

代码语言:javascript
复制
dmesg -T

找一行提到某事的行,比如:

Mon Jan 10 02:24:40 2022 Out memory:已杀死进程1420 (python)总计-vm:14764496kB,anon-rss:13565716kB,file-rss:28kB,shmem-rss:0kB,UID:1000 pgtables:27652kB oom_score_adj:0

重现问题

如果您想自己尝试,可以使用以下代码片段重现相同的行为:

代码语言:javascript
复制
import time
from pathos.multiprocessing import ProcessPool

def do_something(i):
    print(i, 'entering')
    time.sleep(2)
    print(i, 'returning')
    return i

with ProcessPool(2) as pool:
    results = pool.map(
        do_something,
        range(5)
    )

在执行过程中,您可以使用htop杀死其中一个子进程(我的屏幕截图的最后两行)。如果这样做,您将最终处于挂起状态:不使用CPU,但Python脚本永远不会返回。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50921350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档