调用 close() 后大文件没有立即刷新到磁盘?

2024-06-26

我正在使用 python 脚本创建大文件(超过1GB,实际上有 8 个)。在创建它们之后,我必须创建将使用这些文件的进程。

该脚本如下所示:

# This is more complex function, but it basically does this:
def use_file():
    subprocess.call(['C:\\use_file', 'C:\\foo.txt']);


f = open( 'C:\\foo.txt', 'wb')
for i in 10000:
    f.write( one_MB_chunk)
f.flush()
os.fsync( f.fileno())
f.close()

time.sleep(5) # With this line added it just works fine

t = threading.Thread( target=use_file)
t.start()

但应用use_file行为就像foo.txt是空的。发生了一些奇怪的事情:

  • 如果我执行C:\use_file C:\foo.txt在控制台中(脚本完成后)我得到正确的结果
  • 如果我手动执行use_file()在另一个 python 控制台中我得到了正确的结果
  • C:\foo.txt之后立即在磁盘上可见open()被调用,但仍保持大小0B直到脚本结束
  • 如果我添加time.sleep(5)它刚刚开始按预期(或者更确切地说是需要的)工作

我已经发现:

  • os.fsync() http://docs.python.org/2/library/os.html#os.fsync但它似乎不起作用(结果来自use_file就好像C:\foo.txt是空的)
  • Using buffering=(1<<20)(打开文件时)似乎也不起作用

我对这种行为越来越好奇。

问题:

  • 有蟒蛇吗fork close()操作进入后台?这是在哪里记录的?
  • 如何解决这个问题?
  • 我错过了什么吗?
  • 添加后sleep:这是 Windows/Python 的错误吗?

Notes:(针对对方有问题的情况)申请use_data uses:

handle = CreateFile("foo.txt", GENERIC_READ, FILE_SHARE_READ, NULL,
                               OPEN_EXISTING, 0, NULL);
size = GetFileSize(handle, NULL)

然后处理size字节来自foo.txt.


f.close() calls f.flush(),它将数据发送到操作系统。那doesn't必须将数据写入磁盘,因为操作系统会对其进行缓冲。正如您正确地计算出的那样,如果您想强制操作系统将其写入磁盘,您需要os.fsync().

您是否考虑过将数据直接通过管道传输到use_file?


编辑:你这么说os.fsync()“不起作用”。澄清一下,如果你这样做

f = open(...)
# write data to f
f.flush()
os.fsync(f.fileno())
f.close()

import pdb; pdb.set_trace()

然后查看磁盘上的文件,有数据吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调用 close() 后大文件没有立即刷新到磁盘? 的相关文章

  • 查找数据集中的异常值

    我有一个 python 脚本 它创建服务器正常运行时间和性能数据列表的列表 其中每个子列表 或 行 包含特定集群的统计信息 例如 格式良好的它看起来像这样 Cluster Availability Requests Sec Errors S
  • Python TypeError:不支持的操作数类型 -:“int”和“function”

    我是 Python 初学者 正在做一项作业 我不断得到TypeError unsupported operand type s for int and function 即使在研究了错误并应用了建议的修复之后 我并不是在寻找任何人给我一个解
  • 我如何知道Python的unicode函数识别的所有支持的编码

    Python 有一个unicode将字节流转换为 unicode 字符串的内置函数 我只是希望我能查询所有可用的encoding在我的系统上 但如何 这个问题的原因是 有人使用 MAC OS X 向我发送了一封内容编码为 iso 2022
  • 使用 pytherejs 嵌入小部件:错误的视角和相机观察

    我在用pythreejs可视化一些 3D 模型 在 Jupyter 笔记本上可视化模型时 一切都按预期进行 但是当尝试将小部件嵌入 HTML 文档时 我面临两个问题 看起来相机在加载时正在查看 0 0 0 而不是预期的那样 一旦您与小部件交
  • python 函数中的对象不可迭代错误

    我有一个简单的功能如下 comdList range 0 27 for t in comdList print t 但是它返回一个 in object not iterable 错误 在函数之外它工作正常 这是怎么回事 尝试这个 for t
  • 如何在我的 GUI 上绘图

    我正在设计一个 GUIPyQt当我单击一个按钮来绘制我创建的函数的数据图时 我需要显示一个 matplotlib pylab 窗口 它就像 Matlab 中使用的运行时 每次按下该按钮时 我都想将 matplotlib pylab 窗口保留
  • 在Python中将月份和年份的列合并为季度和年份的列

    我有一个数据框 df Month 1 8 Year 2015 2020 df pd DataFrame data df df 想要将其转变为新列 期望的输出 df Month 1 8 Year 2015 2020 Quarter Q1201
  • 使用 SQLAlchemy 查询 Pandas DataFrame 时重命名列

    当您将数据查询到 pandas 数据帧时 有没有办法保留 SqlAlchemy 属性名称 这是我的数据库的简单映射 对于 school 表 我将数据库名称 SchoolDistrict 重命名为较短的 district 我从 DBA 中删除
  • 识别文本中的多个类别和相关情感

    如果您有一个文本语料库 如何识别所有类别 来自预定义类别列表 以及与之相关的情绪 正面 负面写作 我将在 Python 中执行此操作 但现阶段我不一定要寻找特定于语言的解决方案 让我们用一个例子来看看这个问题 试图澄清我的问题 如果我有一整
  • python请求ssl握手失败

    每次我尝试这样做 requests get https url 我收到这条消息 import requests gt gt gt requests get https reviews gethuman com companies Trace
  • 如何忽略 Sentry 捕获中的某些 Python 错误

    我已将 Sentry 配置为捕获 Django Celery 应用程序中的所有错误 它工作正常 但我发现一个令人讨厌的用例是当我必须重新启动我的 Celery 工作人员 PostgreSQL 数据库或消息服务器时 这会导致数千种各种 无法访
  • numpy.polyval() 的反函数

    我想知道 np polyval 是否有一个方便的反函数 我在其中给出 y 值并求解 x 我知道我可以做到这一点的一种方法是 import numpy as np Set up the question p np array 1 1 10 y
  • pip 升级到 pip 10.x.x 后解析需求文件的正确方法?

    所以今天我确实发现随着发布pip 10 x x the req软件包更改了其目录 现在可以在下面找到pip internal req 由于通常的做法是使用parse requirements功能在你的setup py从需求文件中安装所有依赖
  • RubyMine - 没有为项目配置 Ruby 解释器

    我进入 设置 Ruby SDK 和 Gems 然后选择C RailsInstaller Ruby1 9 3 bin ruby exe 它在右侧加载了一堆宝石 看起来它会起作用 我点击 确定 但仍然有糟糕的语法突出显示 并且它仍然认为它没有
  • 如何使用 opencv python 根据检测到的物体的位置生成其热图

    我需要根据对象的位置生成其热图 示例 视频帧中检测到的绿色球 如果它长时间停留在某个位置 那么该位置应该是红色的 并且球在短时间内经过的帧中的位置必须是蓝色的 这样我就需要生成热图 提前致谢 那么你在这里可以做的是 1 首先定义一个热图作为
  • 用于监视文件夹和更新数据库的 Python 守护进程

    这专门用于管理 MP3 文件 但它应该可以轻松地适用于任何包含大量文件的目录结构 我想找到或编写一个守护程序 最好用Python 来监视一个包含许多子文件夹的文件夹 这些子文件夹都应该包含X个MP3文件 每当添加 更新或删除文件时 它都应该
  • 合并大文件的最佳方法是什么?

    我必须合并数千个大文件 每个大约 200MB 我想知道合并这些文件的最佳方法是什么 行将有条件地复制到合并文件中 可以使用 File AppendAllLines 或使用 Stream CopyTo 吗 使用 File AppendAllL
  • Python pandas:向我的数据框中添加一列来计算变量

    我有一个像这样的数据框 gt org group org1 1 org2 1 org3 2 org4 3 org5 3 org6 3 我想将列 count 添加到 gt 数据帧以计算组的成员数量 预期结果如下 org group count
  • Python - 将列表作为参数传递给 SQL,以及更多变量

    我试图在 python 3 6 中将未知数量的参数传递给 SQL Server 这是我使用 pypyodbc 的代码 cursor cnxn cursor theargs 1033286869 1053474957 1063654630 1
  • 导入错误:无法导入名称

    我有一个名为 google translate python 的库 https github com terryyin google translate python https github com terryyin google tra

随机推荐

  • 支付系统的数据库设计

    我有四个表如下 FEES fees id interest amount total amount status id is recurring recurring status from date to date payment id F
  • 将 JSON 数据传递到 Spring MVC 控制器

    我需要将 JSON 字符串发送到 Spring MVC 控制器 但我没有 有任何表单绑定 我只需要将纯 JSON 数据发送到 Controller 类 我正在对 Controller 方法进行 jQuery AJAX 调用 如下面的代码所示
  • 输入到列表并找到同一输入python的最长条纹

    我正在编写一个程序 其中用户将值输入到列表中 直到想要结束为止 该程序将告诉用户他们输入的最长连续数字 例如 如果用户输入 7 7 7 6 6 4 end 则会得到输出 您的最长连胜次数为 3 因为 7 已连续输入 3 次 到目前为止 我有
  • 我可以使用 Python 访问 ImageMagick API 吗?

    我需要使用图像魔术师 http www imagemagick org script index php因为 PIL 没有我正在寻找的可用图像功能量 但是 我想使用Python python 绑定 PythonMagick 自 2009 年
  • Windows 开始键的 Sendkey

    我正在尝试使用Sendkeys来模拟Windows启动键 但我尝试过的选项都不起作用 有人知道如何做到吗 CODE System Runtime InteropServices DllImport user32 dll private Th
  • 如何远程重启服务?

    我可以从 net 项目远程启动或停止服务 ConnectionOptions options new ConnectionOptions options Username 192 168 36 22 test options Passwor
  • C#:格式化价格值字符串

    在 C 中 我有一个双变量价格 其值为 10215 24 我想在一些数字后用逗号显示价格 我的预期输出是 10 215 24 myPrice ToString N2 根据您的需要 您可能还希望显示货币符号 myPrice ToString
  • 更改 c3.js 散点图中气泡的大小

    我有一个散点图 我想改变点的大小 使它们看起来像气泡 有人可以告诉我如何改变气泡的大小吗 这是我的代码 var chart c3 generate data xs IBM ibm x Microsoft microsoft x column
  • Arrays.copyOf 产生浅拷贝还是深拷贝?

    对于是否应该这样做 似乎存在很多困惑和不同的意见 1 和其他来源 Arrays copyOf将产生深拷贝或浅拷贝 此测试表明副本很深 String sourceArray new String Foo String targetArray
  • 在 Windows Server 2008 R2 上将 HKCR\CLSID\* 密钥的所有者更改为管理员

    Windows Server 2008 R2 上有一个注册表项 HKCR CLSID 76A64158 CB41 11D1 8B02 00600806D9B6 其所有者不是管理员 它是TrustedInstaller 现在制作远程 DCOM
  • XCode 12.5 缺少权利 com.apple.developer.linked-appclip-app-identifiers

    将 Xcode 版本更新到 12 5 后 我遇到了 App Clip 问题 在 App Store Connect 上传期间 我收到警告 TMS 90876 Missing entitlement This app contains an
  • 多语言 Google Translate API 返回 (503) 服务器不可用

    我尝试使用谷歌翻译进行翻译 但出现错误 服务器不可用 我的猜测是 当我尝试在地址栏中输入相同的内容时 我们会收到一个需要填写的验证码 如果我们通过验证码 那么它只会下载一个 txt 文件 我认为这可能是验证码页面的问题 而不是服务器不可用的
  • 您最好的 Swing 设计模式和技巧是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 无法在 Android Studio 中将项目迁移到 Gradle

    我有一个项目已经在 Android Studio 中运行 在 Android Studio 中打开项目后 我收到消息 将项目迁移到 Gradle 该项目不使用 Gradle 构建系统 我们建议您迁移到使用 Gradle 构建系统 有关迁移到
  • WooCommerce 订阅 - 获取特定订阅的产品

    有没有办法从 product from subscription 谢谢这个帖子 https stackoverflow com questions 42791096 woocommerce subscriptions get related
  • Ubuntu 16.04 LTS - 如何为 perf 工具启用符号

    我正在尝试为我的应用程序收集一些分析数据 并为此运行性能工具和火焰图 我指的是此幻灯片中提供的说明 https www slideshare net brendangregg java performance analysis on lin
  • struts2应用程序未运行

    我是 Maven 和 struts2 的新手 当我尝试运行我的程序时出现以下错误 严重 调度程序初始化失败 无法加载配置 操作 文件 E workspace metadata plugins org eclipse wst server c
  • 使用 ColdFusion 在电子表格中创建验证下拉列表时出错

    我只是使用 ColdFusion 通过数据库查询在电子表格中创建验证下拉列表 但我收到以下错误 公式中的字符串文字不能大于 255 个 ASCII 字符 任何人都可以帮助纠正这个问题 因为我迫切需要此功能
  • 嵌套 case 语句

    有人可以解释一下嵌套吗case语句变成另一个语句 我指的是达夫的装置 http en wikipedia org wiki Duff 27s device其他所有的地方case语句在里面do while循环关联于case 0 我无法理解它
  • 调用 close() 后大文件没有立即刷新到磁盘?

    我正在使用 python 脚本创建大文件 超过1GB 实际上有 8 个 在创建它们之后 我必须创建将使用这些文件的进程 该脚本如下所示 This is more complex function but it basically does