V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
messagecao
V2EX  ›  Python

Python 怎么多线程写同一个 excel?

  •  
  •   messagecao · 2018-06-24 09:35:33 +08:00 · 6834 次点击
    这是一个创建于 2369 天前的主题,其中的信息可能已经有所发展或是发生改变。
    内容多了后,一格一格写感觉好慢,有没有哪个包可以多线程同时写同一个 excel ?
    12 条回复    2018-06-25 13:09:57 +08:00
    xd314697475
        1
    xd314697475  
       2018-06-24 09:41:43 +08:00
    XlsxWriter ?
    a7a2
        2
    a7a2  
       2018-06-24 09:45:22 +08:00   ❤️ 1
    很明显你没有用熟哪些 xls 库,为何要一格一格写?
    messagecao
        3
    messagecao  
    OP
       2018-06-24 10:06:22 +08:00
    @a7a2 我一直局限在 xlwt,这个模块只能一格一格的写
    messagecao
        4
    messagecao  
    OP
       2018-06-24 10:07:12 +08:00
    @xd314697475 谢谢,我试试:)
    aaronzjw
        5
    aaronzjw  
       2018-06-24 10:51:52 +08:00 via iPhone
    多线程写多个 csv,最后 merge 下
    mkeith
        6
    mkeith  
       2018-06-24 10:55:58 +08:00 via iPhone
    不都是在内存中操作然后一下保存到文件的吗?
    zhengxiaowai
        7
    zhengxiaowai  
       2018-06-24 11:00:21 +08:00
    writerows 了解一下
    whoami9894
        8
    whoami9894  
       2018-06-24 14:52:00 +08:00 via Android
    老一点的 xls 结构可以制表符横向分格,换行符纵向分格写
    geelaw
        9
    geelaw  
       2018-06-24 15:26:29 +08:00 via iPhone   ❤️ 2
    然而 CPython 的实现里永远只有一个线程在运行 Python 代码,除非写 Excel 的库已经实现了在 Python 外的代码(如该库用 C++ 实现)分别释放和拿取下 GIL,否则不会有效果。

    如果该库用的是 Excel COM,那么多线程也不会有效果,因为 Excel object 是 single-thread apartment,这表示 Excel object 必须在同一个线程上运行。因为 Excel 是 out-of-process server,实际上所有调用都涉及 marshaling,修改业务在 Excel 进程里进行,你最多可以节省的是 marshaling 需要的时间。
    linnn2
        10
    linnn2  
       2018-06-24 22:08:50 +08:00 via Android
    估计你的性能瓶颈在 io 吧,如果多线程了你还要考虑锁的问题
    xpresslink
        11
    xpresslink  
       2018-06-24 22:27:54 +08:00
    你提出这么一个问题说明你对计算原理基本知识太差了。

    第一、一格一格地写感觉好慢,这只是错觉。操作都是是内存里进行的,只有在关闭文件的时候才真正的向磁盘写入。

    第二、磁盘是串行设备,对于同一个文件,多线程也要排队去写并没有卵用,为了防止多线程把文件搞乱了还要加同步锁。
    nbboy
        12
    nbboy  
       2018-06-25 13:09:57 +08:00
    问题的关键是你要让用户感觉不慢,比如在用户一遍操作的时候一边导出 excel,或者给用户一些提示,等导出成功后再让用户来下载诸如此类。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3004 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:17 · PVG 22:17 · LAX 06:17 · JFK 09:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.