首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Coding
V2EX  ›  Python

请教一个 Python 写入文件的问题,几个小时了,解决不了,求助各位大佬

  •  
  •   37Y37 · 32 天前 · 1417 次点击
    这是一个创建于 32 天前的主题,其中的信息可能已经有所发展或是发生改变。
    代码如下:

    ```python
    def record(self, data):
    iodata = [time.time() - self.time, 'o', data]
    with open(RECORD_DIR + self.filename, 'ab', buffering=0) as f:
    print((json.dumps(iodata)))
    f.write((json.dumps(iodata) + '\n').encode('utf-8'))
    ```

    简化过的代码如上,可能每一毫秒都会调用 record 数次追加写入数据到文件

    print 打印数据一切正常,大概如下



    而 f.write 就会有一部分数据丢失(格式不对了,每一行都应该是一个 list)



    起初是直接用的 a 模式,f.write(json.dumps(iodata) + '\n')这样的,有问题,怀疑是 buffer 的问题,所以添加了参数 buffeering=0,因为只有字节流才能用 buffering=0,所以这里改成了 ab 模式,同时 encode 了 json

    还尝试过 f.writelines 和强制加了个 f.close 一样无法解决,求助各位大神
    7 回复  |  直到 2019-11-09 11:35:01 +08:00
        1
    shm7   32 天前 via iPhone
    1ms 不到写一次,io 如此密集,就没想过文件保持打开么? write 和 print 的不一样 print 有个啥用?搞个错例子调试一下试试就能知道是不是单纯 write 的锅。

    槽点太多了,各种+,估计大家看不上所以懒得留言
        2
    37Y37   32 天前
    @shm7 感谢大佬留言,保持文件打开,使用队列,我都有考虑,抛去技术方案不讲,想知道这个究竟是什么问题,我有尝试,print 和 write 的参数一模一样,还是同样的问题
        3
    j0hnj   32 天前 via iPhone
    有多线程吗?
        4
    37Y37   32 天前
    @j0hnj 一语点醒梦中人,还真的有多线程,感谢大佬,大概率线程的问题,万分感谢
        5
    shm7   32 天前 via iPhone
    @37Y37 可能就不是这函数的毛病啊。读写很多,有没有想到过文件是否被锁住,是不是线程安全的。砖没抛好。。。这都要实验,明白不
        6
    12tall   32 天前
    看到乱序 第一感觉就是多线程
        7
    37Y37   32 天前
    @j0hnj
    @12tall
    感谢两位大佬,还是自己太菜,感谢两位
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1594 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 27ms · UTC 16:59 · PVG 00:59 · LAX 08:59 · JFK 11:59
    ♥ Do have faith in what you're doing.