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

2018-06-24 09:35:33 +08:00
 messagecao
内容多了后,一格一格写感觉好慢,有没有哪个包可以多线程同时写同一个 excel ?
6705 次点击
所在节点    Python
12 条回复
xd314697475
2018-06-24 09:41:43 +08:00
XlsxWriter ?
a7a2
2018-06-24 09:45:22 +08:00
很明显你没有用熟哪些 xls 库,为何要一格一格写?
messagecao
2018-06-24 10:06:22 +08:00
@a7a2 我一直局限在 xlwt,这个模块只能一格一格的写
messagecao
2018-06-24 10:07:12 +08:00
@xd314697475 谢谢,我试试:)
aaronzjw
2018-06-24 10:51:52 +08:00
多线程写多个 csv,最后 merge 下
mkeith
2018-06-24 10:55:58 +08:00
不都是在内存中操作然后一下保存到文件的吗?
zhengxiaowai
2018-06-24 11:00:21 +08:00
writerows 了解一下
whoami9894
2018-06-24 14:52:00 +08:00
老一点的 xls 结构可以制表符横向分格,换行符纵向分格写
geelaw
2018-06-24 15:26:29 +08:00
然而 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-06-24 22:08:50 +08:00
估计你的性能瓶颈在 io 吧,如果多线程了你还要考虑锁的问题
xpresslink
2018-06-24 22:27:54 +08:00
你提出这么一个问题说明你对计算原理基本知识太差了。

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

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

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

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

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

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

© 2021 V2EX