当前位置: 首页 > 工具软件 > Excel Writer > 使用案例 >

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

莘欣怿
2023-12-01

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

 类似资料: