当前位置: 首页 > 面试题库 >

所有示例parallel.futures代码均因“ BrokenProcessPool”而失败

穆俊哲
2023-03-14
问题内容

在创建所需的实际应用程序之前,我试图对此有一个基本的了解。我最近从2.7移到了3.3。

python文档直接复制粘贴此代码失败,这里的一个简单示例也是如此。

这是我的代码,从第二个示例派生而来:

import concurrent.futures

nums = [1,2,3,4,5,6,7,8,9,10]

def f(x):
    return x * x

# Make sure the map and function are working
print([val for val in map(f, nums)])

# Test to make sure concurrent map is working
with concurrent.futures.ProcessPoolExecutor() as executor:
    for item in executor.map(f, nums):
        print(item)

这是输出:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Traceback (most recent call last):
  File "<string>", line 420, in run_nodebug
  File "<module1>", line 13, in <module>
  File "C:\Python33\lib\concurrent\futures\_base.py", line 546, in result_iterator
    yield future.result()
  File "C:\Python33\lib\concurrent\futures\_base.py", line 399, in result
    return self.__get_result()
  File "C:\Python33\lib\concurrent\futures\_base.py", line 351, in __get_result
    raise self._exception
concurrent.futures.process.BrokenProcessPool: A process in the process pool was terminated abruptly while the future was running or pending.

如何使此代码按预期工作?我希望这些示例可以立即使用。


问题答案:

这是我的错,有两个原因:

  1. 该代码不受保护,即没有 if __name__
  2. 看起来奇怪的Traceback是因为未保存文件。以前从没给我造成任何问题,但是在这种情况下确实没有。

同时纠正 这两个 错误。

最终测试代码:

import concurrent.futures

nums = [1,2,3,4,5,6,7,8,9,10]

def f(x):
    return x * x
def main():
    # Make sure the map and function are working
    print([val for val in map(f, nums)])

    # Test to make sure concurrent map is working
    with concurrent.futures.ProcessPoolExecutor() as executor:
        print([val for val in executor.map(f, nums)])

if __name__ == '__main__':
    main()

预期输出:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]


 类似资料:
  • 我认为,到目前为止,几乎每个有SSL证书信任错误经验的Java程序员都使用过或至少遇到过以下代码: 到目前为止,我已经成功地使用了这段代码来忽略通过其IP地址访问HTTPs站点时的证书不匹配(不要问我为什么这样做,这是一个完全不同的故事)。然而,我尝试对另一个HTTPs站点执行相同的操作,发现此代码失败,出现以下异常: 所以,问题是,出了什么问题,我能做些什么?

  • 我想使用Android版的PDFBox从头开始创建PDF。应显示图像和表格,以及每个页面的重复PDF标题。 我使用的版本是com。tom_roush:pdfbox android:1.8.10.0,可在https://github.com/TomRoush/PdfBox-Android. 所以我克隆了存储库并尝试运行示例代码。Edit1:这是示例代码的链接:https://github.com/T

  • 我只是复制粘贴的代码从本教程在LWJGL维基,我现在将粘贴在这里为您的方便。 当我运行它时,它抛出了一个错误 我把它缩小到方法中对的调用,然后点击Google了解这可能意味着什么,并发现了这个SO问题,其中列出了一大堆可能的原因(为了方便,这里列出了)。 > 如果非零缓冲区对象名称绑定到启用的数组或绑定,并且当前映射了缓冲区对象的数据存储,则生成 。 如果在执行和相应的之间执行了,则生成。 如果当

  • 我正在使用Code::Blocks 12.11(使用MinGW),当我想在设置程序参数后启动调试会话时,GDB调试器在一开始就停止执行,整个程序就会冻结。这让我大吃一惊,因为我无法调试需要命令行参数的程序。这是“调试器”窗口中的最后两行(在此之后,什么都没有发生,代码::块冻结): 有谁知道为什么GDB不使用命令行参数的原因?

  • crypto 加密实例代码 "use strict"; //引用crypto模块 const crypto = require("crypto"); //-------------MD5 可以任意多次调用update(),update()默认字符串编码是UTF-8 const hash = crypto.createHash("md5"); hash.update("hello, world!"

  • 服务热重启 控制器 Model与数据库 redis封装示例 kafka使用 web socket web socket命令解析 web socket client 直播 TCP基础实现 TCP命令解析 UDP UDP命令解析 自定义Event Loop 图片验证码 多进程爬虫 使用模板引擎