Python 多重处理和序列化数据

2023-11-30

我正在学校计算机上运行脚本multiprocessing模块。我经常序列化数据。可以用下面的代码来概括:

import multiprocessing as mp
import time, pickle

def simulation(j):
    data = []
    for k in range(10):
        data.append(k)
        time.sleep(1)
        file = open('data%d.pkl'%j, 'wb')
        pickle.dump(data, file)
        file.close()
if __name__ == '__main__':
    processes = []
    processes.append(mp.Process(target = simulation, args = (1,) ))
    processes.append(mp.Process(target = simulation, args = (2,) ))
    for process in processes:
        process.start()
    for process in processes:
        process.join()

因此,当我实际运行代码进行更多模拟以及我想象的更密集的各种任务时,我收到以下错误:IOError: [Errno 5] Input/output error通常前面有file.open(...) or file.close().

我的问题:

  • 如何修复脚本中的此错误?
  • 这个错误对于Python新手来说意味着什么?参考文献表示赞赏。

关于我的程序的更多注意事项:

  • 而不是设置多进程属性daemon to be True,我使用 screen 运行脚本然后分离。这也允许我断开连接,而不必担心我的脚本停止。
  • 这似乎是一个相关的question关于使用打印subprocess模块。我没有像我说的那样明确使用守护进程,所以不确定这是否有帮助。
  • 这通常发生在运行大约一天之后,并且发生在不同进程的不同时间。

你的程序看起来很不错。在这种情况下IOError只是意味着“坏事发生了”。整套模拟数据对于Python进程来说变得太大了,所以它带着神秘的消息退出了。

以下版本中的一些改进:

  • 一旦产生了一些数据,append它到一个数据文件,然后 把它从记忆中抹掉。随着时间的推移,程序应该具有大致相同的 RAM 使用量,而不是使用越来越多,然后崩溃。

  • 方便地,如果一个文件是一个串联的pickle物体,我们 以后可以轻松打印每一份以供进一步检查。显示示例代码。

玩得开心!

source

import multiprocessing as mp
import glob, time, pickle, sys

def simulation(j):
    for k in range(10):
        datum = {'result': k}
        time.sleep(1)
        with open('data%d.pkl'%j, 'ab') as dataf:
            pickle.dump(datum, dataf)

def show():
    for datname in glob.glob('data*.pkl'):
        try:
            print '*'*8, datname
            with open(datname, 'rb') as datf:
                while True:
                    print pickle.load(datf)
        except EOFError:
            pass

def do_sim():
    processes = []
    processes.append(mp.Process(target = simulation, args = (1,) ))
    processes.append(mp.Process(target = simulation, args = (2,) ))
    for process in processes:
        process.start()
    for process in processes:
        process.join()

if __name__ == '__main__':
    if '--show' in sys.argv:
        show()
    else:
        do_sim()

“python ./msim.py --show”的输出

******** data2.pkl
{'result': 0}
{'result': 1}
{'result': 2}
{'result': 3}
{'result': 4}
{'result': 5}
{'result': 6}
{'result': 7}
{'result': 8}
{'result': 9}
******** data1.pkl
{'result': 0}
{'result': 1}
{'result': 2}
{'result': 3}
{'result': 4}
{'result': 5}
{'result': 6}
{'result': 7}
{'result': 8}
{'result': 9}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 多重处理和序列化数据 的相关文章

随机推荐

  • Python - beautifulsoup,应用于文件夹中的每个文本文件并生成新的文本文件

    我正在使用以下 Python Beautifulsoup 代码从文本文件中删除 html 元素 from bs4 import BeautifulSoup with open textFileWithHtml txt as markup s
  • 忽略指定值的 numpy 数组的平均值

    我有许多一维 numpy ndarray 其中包含给定节点和网络中所有其他节点之间的路径长度 我想计算其平均值 但事实上 如果两个节点之间不存在路径 则算法会针对给定连接返回值 2147483647 这一事实使问题变得复杂 如果我不处理这个
  • (视觉)SVN 通过正则表达式忽略文件

    我需要排除具有以下模式的文件 ProjectFoo Data 0 9 14 lgp 如何将 RegEx 用于 Visual SVN 忽略列表 subversion 忽略列表不支持正则表达式 它们被实现为 glob file 模式 这些模式不
  • 如何在onclick事件中调用多个JavaScript函数?

    有什么办法可以使用onclickhtml 属性调用多个 JavaScript 函数 onclick doSomething doSomethingElse 但实际上 你最好不要使用onclick并通过 Javascript 代码将事件处理程
  • Python tkinter 跟踪错误

    我正在尝试为我的代码编写一个 GUI 我的计划是使用 tkinter 的StringVar DoubleVar等来实时监控我的输入 所以我发现DoubleVar trace w callback 功能 但是 每次我进行更改时都会遇到异常 E
  • 如何检查鼠标是否位于 MovieClip 上?

    没有听众参与 问题是 我可以用鼠标移到 and 鼠标输出侦听器 但如果您足够快地将鼠标拖动到影片剪辑上 则可能不会激活其中一个侦听器 我已经尝试过好几次了 我从来没有遇到过 mouseOver 和 mouseOut 的问题 但你可以使用 h
  • 我可以使用 Flutter 更改 iOS (Android) 上的底部颜色吗

    我们可以在 Flutter 中使用 API 在 iOS Android 上更改此颜色吗 是的 您可以使用 API 来更改底部安全区域的颜色 尝试使用以下代码 我希望你的问题能够得到解决 override Widget build Build
  • 返回上一个视图控制器不起作用

    我的第一个视图控制器有一个按钮 它触发 IBActiongoTo2ndVc 它呈现了第二个 ViewController class FirstVC UIViewController IBAction func goTo2ndVc let
  • 隐式等待、显式等待、流畅等待

    隐式 显式 流利等之间有什么区别 如果我们在隐式等待中设置 10 秒 并且在 10 秒之前 则在 3 秒内只有元素被定位 到时候会发生什么 它将等待 10 秒钟或继续进行 隐式等待 隐式等待是一个配置的实现网络驱动程序实例即driver进行
  • 查看 NSCharacterSet (Swift) 中的字符[重复]

    这个问题在这里已经有答案了 当我尝试像这样列出 NSCharacterSet 中的字符时 print NSCharacterSet URLQueryAllowedCharacterSet 它不会打印出字符 而是打印出类似的内容 基于另一个答
  • SQL Server 2008,根据订单类型和订单日期时间将库存分配给销售订单数量

    我根据以下订单类型将库存先进先出分配给销售订单 DECLARE tblOrder TABLE DealerCode NVARCHAR 50 PartCode NVARCHAR 50 OrderQty INT OrderType NVARCH
  • 使用 Newtonsoft.Json 解析 json 时出现 RuntimeBinderException

    我正在尝试将简单的 json 解析为 Windows Phone 8 中的动态对象 我使用 Newtonsoft JSON 库和以下代码 dynamic response JObject Parse responseText string
  • cypress 中的条件语句

    我正在尝试在 cypress 上执行条件语句 以检查标题中的登录链接是否为 登录 或 帐户 或 类 然后单击它 if 条件不起作用 cy get header then header gt if header find Sign in le
  • 错误:文件路径太长

    我正在尝试使用 C 中的各种文件函数 例如File GetLastWriteTime 对放置在大于 Windows 7 上允许的最大路径 即 260 的路径上的文件执行复制命令 它在长路径名上给我一个错误 在 MSDN 支持上 我他们要求使
  • 我可以将 R8G8B8A8 放入 UBO 中,并将其用作 vec4 吗?

    我尝试优化工作计算着色器 它的目的是创建一个图像 找到合适的颜色 使用一个小调色板 然后调用imageStore image ivec2 vec4 颜色在 UniformBuffer 的 uint 数组中进行索引 该 UBO 中的一种颜色封
  • 通过访问路由名称参数来自动化委托权限并检查用户的权限

    我已经为 ACL 层实现了委托角色 现在 我计划自动对每个请求进行权限检查 这样每次我就不必为用户角色编写权限 例如 我有公司资源 用户角色为 管理员 他只能查看公司 另一个用户角色为 超级 可以管理公司 在数据库中 我为他们提供了适当的权
  • Android操作栏自定义图标

    I want to create Action Bar like this 我在开发指南中看到操作栏图标应该具有特定的大小 是否可以 是否可以在操作栏中添加没有可点击指示的项目 我理解您对操作栏图标大小的担忧 我也有同样的担忧 直到我发现这
  • 如何将 ezComponents 与 magento 集成

    在 本机 Zend Framework 应用程序中 我将通过将 ezComponents 的自动加载器添加到 Zends 自动加载器来启用 ezComponents autoLoader Zend Loader Autoloader get
  • 刷新node.js脚本!

    我正在从终端 mac 运行带有 node js 的脚本 当我更改脚本时 我希望能够重新运行它 而不必关闭并重新打开终端 我是 mac 新手 不知道如何执行此操作 Thanks How are you starting Node You sh
  • Python 多重处理和序列化数据

    我正在学校计算机上运行脚本multiprocessing模块 我经常序列化数据 可以用下面的代码来概括 import multiprocessing as mp import time pickle def simulation j dat