在python中通过多处理传递openpyxl工作簿对象

2024-10-04 07:30:23 发布

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

我正在尝试编写一段代码来传递工作簿,以便使用python多处理库创建多进程。当我试图运行代码时,我得到以下错误

“记忆错误” 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“C:\Users\ajit\u kumar\u kompalli\AppData\Local\Programs\Python38-32\lib\multiprocessing\spawn.py”,第116行,在spawn\u main中 exitcode=_main(fd,父节点_sentinel) 文件“C:\Users\ajit\u kumar\u kompalli\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\spawn.py”,第126行,在主目录中 self=reduce.pickle.load(从父级) EOFError:输入用尽'

这是我的密码

batch_files_path = r"C:\Users\admin\Desktop\Test\"
master_file = r"C:\Users\admin\Desktop\Test\Master.xlsm"
fwbk = load_workbook(master_file)
ws_WF = fwbk['Workflow']

for count in range(3, len(ws_WF['A']) + 1):
    if ws_WF.cell(row=count, column=2).value not in d_batch_type:
        d_batch_type[ws_WF.cell(row=count, column=2).value] = ws_WF.cell(row=count, column=3).value

#Generating the Batch - Index Dictionary - Array for operations
d_batch_index = {batch: [] for batch in d_batch_type}
for batch in d_batch_type:
    for count in range(3, len(ws_WF['A']) + 1):
        if str(batch) == str(ws_WF.cell(row=count,column=2).value):
            d_batch_index[batch].append(ws_WF.cell(row=count,column=1).value)

jobs=[]
for batch in d_batch_index:
    final_path = batch_files_path + str(batch) + '_Test.xlsx'
    if d_batch_type[batch] == 'Weights':
        process = multiprocessing.Process(name=batch,target=generate_weighted_worksheet, args=(fwbk, final_path))
        jobs.append(process)

    elif d_batch_type[batch] == 'AWF':
        process = multiprocessing.Process(name=batch,target=generate_awf_worksheet, args=(fwbk, final_path))
        jobs.append(process)

process = multiprocessing.Process(name='pse_ops', target=generate_pse_ops_worksheet,
                                  args=(fwbk, pseops_output_path))
jobs.append(process)

for j in jobs:
    logging.debug("Starting the process: {}".format(j))
    j.start()
    print("Starting the process: {} pid:{}".format(j,j.pid))

for j in jobs:
    logging.debug("Joining the process: {} under main".format(j))
    j.join()

函数生成加权工作表、生成awf工作表、生成pse操作工作表使用fwbk作为输入。所以我想传递那个fwbk变量。我知道python多重处理分配新内存并复制传递的对象/变量。但我不确定这个问题到底是什么。请帮忙


Tags: pathinforwstypecountbatchjobs