1
xd314697475 2018-06-24 09:41:43 +08:00
XlsxWriter ?
|
2
a7a2 2018-06-24 09:45:22 +08:00 1
很明显你没有用熟哪些 xls 库,为何要一格一格写?
|
3
messagecao OP @a7a2 我一直局限在 xlwt,这个模块只能一格一格的写
|
4
messagecao OP @xd314697475 谢谢,我试试:)
|
5
aaronzjw 2018-06-24 10:51:52 +08:00 via iPhone
多线程写多个 csv,最后 merge 下
|
6
mkeith 2018-06-24 10:55:58 +08:00 via iPhone
不都是在内存中操作然后一下保存到文件的吗?
|
7
zhengxiaowai 2018-06-24 11:00:21 +08:00
writerows 了解一下
|
8
whoami9894 2018-06-24 14:52:00 +08:00 via Android
老一点的 xls 结构可以制表符横向分格,换行符纵向分格写
|
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 需要的时间。 |
10
linnn2 2018-06-24 22:08:50 +08:00 via Android
估计你的性能瓶颈在 io 吧,如果多线程了你还要考虑锁的问题
|
11
xpresslink 2018-06-24 22:27:54 +08:00
你提出这么一个问题说明你对计算原理基本知识太差了。
第一、一格一格地写感觉好慢,这只是错觉。操作都是是内存里进行的,只有在关闭文件的时候才真正的向磁盘写入。 第二、磁盘是串行设备,对于同一个文件,多线程也要排队去写并没有卵用,为了防止多线程把文件搞乱了还要加同步锁。 |
12
nbboy 2018-06-25 13:09:57 +08:00
问题的关键是你要让用户感觉不慢,比如在用户一遍操作的时候一边导出 excel,或者给用户一些提示,等导出成功后再让用户来下载诸如此类。。。
|