gpt4 book ai didi

python - 如何使用在不同多处理进程中创建的变量?

转载 作者:太空宇宙 更新时间:2023-11-03 21:24:12 25 4
gpt4 key购买 nike

抱歉,我是 Python 新手。

任何人都可以帮忙编写下面的代码吗?我正在尝试将两个单独的多处理进程创建的两个数据帧写入同一个 Excel 文件。

编辑:这是简化的代码。在我的实际项目中,数据帧是在不同的连接上使用 pd.read_sql() 构建的。如果这不会带来任何明显的速度影响,请告诉我。我只是假设正常运行它意味着等待第一个连接的 SQL 查询在第二个连接之前运行。

import pyodbc
import pandas as pd
import os
from datetime import datetime
import multiprocessing

def Test1():
global df
df = pd.DataFrame({'Data': [10, 20, 30, 20, 15, 30, 45]})

def Test2():
global df2
df2 = pd.DataFrame({'Data': [20, 40, 60, 40, 30, 60, 90]})

if __name__ == '__main__':
Proc1 = multiprocessing.Process(target=Test1)
Proc2 = multiprocessing.Process(target=Test2)
Proc1.start()
Proc2.start()
Proc1.join()
Proc2.join()
writer =
pd.ExcelWriter(os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop','Test.xlsx') , engine='xlsxwriter')
df.to_excel(writer, sheet_name='Test Title',index=False)
df2.to_excel(writer,sheet_name='Test Title2',index=False)
workbook = writer.book
worksheet = writer.sheets['Test Title']
worksheet = writer.sheets['Test Title2']
writer.save()

我不知道术语来寻找答案是没有帮助的。因此,如果这与比我更懂 Python 的人提出的问题重复,我深表歉意。

另外,错误消息:

line 37, in <module>
df.to_excel(writer, sheet_name='Test Title',index=False)
NameError: name 'df' is not defined

最佳答案

在多处理中使用 global 并不像您想象的那样工作。

Test1Test2 均在单独进程中运行,与父进程不共享数据 .

您可以做的一些事情:

  • 在启动进程之前创建一个multiprocessing.Queue。然后,进程可以使用该队列将数据发送回父进程。数据可能必须能够被腌制。父级将数据写入 Excel 文件。
  • 让每个进程将自己的数据帧写入文件,然后向父进程发送已完成的消息。当所有流程完成后,父级将它们合并到一个 Excel 文件中。其变体是使用内存映射文件 (mmap)。如果数据量不超过可用内存,后者效果很好。

哪种方法最有效取决于很多因素。对于少量数据,使用队列是一个不错的选择。对于大量数据,使用中间文件(尤其是在 SSD 上)可能是一个不错的选择。

关于python - 如何使用在不同多处理进程中创建的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53970541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com