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

2024-04-25 06:37:12 发布

您现在位置:Python中文网/ 问答频道 /正文

抱歉,有点像Python新手。你知道吗

有人能帮我写下面的代码吗? 我正在尝试将两个数据帧(由两个独立的多处理进程创建)写入同一个excel文件。你知道吗

编辑:这是简化的代码。在我的实际项目中,数据帧是使用pd.read\U 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

Tags: tonametestimportdfosexcelmultiprocessing
1条回答
网友
1楼 · 发布于 2024-04-25 06:37:12

global与多处理结合使用并不像您认为的那样有效。你知道吗

Test1Test2都在一个独立的进程中运行,该进程不与父进程共享数据。你知道吗

你可以做一些事情:

  • 在启动进程之前创建一个multiprocessing.Queue。然后进程可以使用该Queue将数据发送回父进程。数据可能必须能够被处理。父级将数据写入excel文件。你知道吗
  • 让每个进程将自己的数据帧写入一个文件,然后向父进程发送一条消息,说明它已经完成了。所有进程完成后,父进程将它们合并到一个excel文件中。一种变体是使用内存映射文件(mmap)。如果数据量不满足可用内存的要求,后者就可以很好地工作。你知道吗

哪种方法最有效取决于许多因素。对于少量数据,使用Queue是一个很好的选择。对于大量数据,使用中间文件(特别是在SSD上)是一个不错的选择。你知道吗

相关问题 更多 >