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

2018 年 6 月 24 日
 messagecao
内容多了后,一格一格写感觉好慢,有没有哪个包可以多线程同时写同一个 excel ?
7162 次点击
所在节点    Python
12 条回复
xd314697475
2018 年 6 月 24 日
XlsxWriter ?
a7a2
2018 年 6 月 24 日
很明显你没有用熟哪些 xls 库,为何要一格一格写?
messagecao
2018 年 6 月 24 日
@a7a2 我一直局限在 xlwt,这个模块只能一格一格的写
messagecao
2018 年 6 月 24 日
@xd314697475 谢谢,我试试:)
aaronzjw
2018 年 6 月 24 日
多线程写多个 csv,最后 merge 下
mkeith
2018 年 6 月 24 日
不都是在内存中操作然后一下保存到文件的吗?
zhengxiaowai
2018 年 6 月 24 日
writerows 了解一下
whoami9894
2018 年 6 月 24 日
老一点的 xls 结构可以制表符横向分格,换行符纵向分格写
geelaw
2018 年 6 月 24 日
然而 CPython 的实现里永远只有一个线程在运行 Python 代码,除非写 Excel 的库已经实现了在 Python 外的代码(如该库用 C++ 实现)分别释放和拿取下 GIL,否则不会有效果。

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

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

第二、磁盘是串行设备,对于同一个文件,多线程也要排队去写并没有卵用,为了防止多线程把文件搞乱了还要加同步锁。
nbboy
2018 年 6 月 25 日
问题的关键是你要让用户感觉不慢,比如在用户一遍操作的时候一边导出 excel,或者给用户一些提示,等导出成功后再让用户来下载诸如此类。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/465375

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX