python操作excel表格写入多行和多列_python多处理:写入同一excel-fi

本文讨论了两种Python处理Excel的方法:使用`pool.map`和创建独立进程。第一种方法适合快速设置和序列化结果,而第二种方法能实现所有工作负载的并行处理。通过`multiprocessing`模块,详细解释了如何利用`Queue`在多个进程中同步数据,以实现并行写入Excel。文章还提到了在使用`mp.Pool`时,`.to_excel()`会按顺序调用,若要并行调用,需借助`Queue`。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1) Why did you implement time.sleep in several places in your 2nd method?

在__main__,time.sleep(0.1),给启动的process一个启动的时间片。

在f2(fq, q)中,给queue一个时间片,以将所有缓冲数据刷新到管道,并

使用q.get_nowait()。

在w(q)中,仅用于测试writer.to_excel(...)的长期运行,

我把这个拿走了。在2) What is the difference between pool.map and pool = [mp.Process( . )]?

使用pool.map不需要Queue,不传递任何参数,更短的代码。

worker_process必须立即返回result并终止。

pool.map只要iteration都完成了,就会启动一个新进程。

在此之后必须处理results。在

使用pool = [mp.Process( . )],启动nprocesses。

process终止于queue.EmptyCan you think of a situation where you would prefer one method over the other?

方法1:快速设置,序列化,只对结果感兴趣继续。

方法二:如果你想把所有的工作负荷都并行进行。在

你不能在进程中使用global writer。

writer实例必须属于一个process。在

mp.Pool的用法,例如:def f1(k):

# *** DO SOME STUFF HERE***

results = pd.DataFrame(df_)

return results

if __name__ == '__main__':

pool = mp.Pool()

results = pool.map(f1, range(len(list_of_days)))

writer = pd.ExcelWriter('../test/myfile.xlsx', engine='xlsxwriter')

for k, result in enumerate(results):

result.to_excel(writer, sheet_name=list_of_days[k])

writer.save()

pool.close()

这导致.to_excel(...)在__main__进程中按顺序调用。在

如果你想要并行.to_excel(...),你必须使用mp.Queue()。

例如:

worker过程:

^{pr2}$

writer过程:def w(q):

writer = pd.ExcelWriter('myfile.xlsx', engine='xlsxwriter')

while True:

try:

titel, result = q.get()

except ValueError:

writer.save()

exit(0)

result.to_excel(writer, sheet_name=titel)

__main__过程:if __name__ == '__main__':

w_q = mp.Queue()

w_p = mp.Process(target=w, args=(w_q,))

w_p.start()

time.sleep(0.1)

f_q = mp.Queue()

for i in range(len(list_of_days)):

f_q.put(i)

pool = [mp.Process(target=f2, args=(f_q, w_q,)) for p in range(os.cpu_count()+1)]

for p in pool:

p.start()

time.sleep(0.1)

for p in pool:

p.join()

w_q.put('STOP')

w_p.join()

测试Python:3.4.2-熊猫:0.19.2-十lsxwriter:0.9.6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值