You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Python 3.8 LibreOffice宏中使用multiprocessing避免PicklingError

解决LibreOffice宏中multiprocessing的pickle序列化问题

问题根源是LibreOffice会将宏代码注入到ooo_script_framework临时模块中,子进程无法识别这个内部模块,导致pickle序列化函数失败。解决思路是将需要多进程执行的函数放到独立的Python模块中,脱离对ooo_script_framework的依赖。

步骤1:创建独立任务模块

新建一个名为my_tasks.py的文件,将task函数移到这里:

def task():
    with open("./test.txt", "w") as f:
        f.write("toto")

步骤2:修改宏代码

更新MyMacro.py,导入独立模块中的task函数,同时修正原代码的两处错误:

import multiprocessing as mp
import time
import sys
import os

# 将当前宏所在目录添加到Python路径,确保能导入my_tasks
script_dir = os.path.dirname(os.path.abspath(__file__))
if script_dir not in sys.path:
    sys.path.append(script_dir)

from my_tasks import task

def MyMacro():
    # 注意Process需要指定target参数,原代码写法错误
    p = mp.Process(target=task)
    p.start()
    time.sleep(1)
    # Process没有stop()方法,用join()等待进程自然结束,或用terminate()强制终止
    p.join()

原理说明

将任务函数放到独立模块后,子进程可以正常导入my_tasks模块,pickle序列化的是my_tasks.task而非ooo_script_framework.task,避免了子进程无法识别LibreOffice内部模块的问题。

内容的提问来源于stack exchange,提问作者Hiul_Dragonfel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:03:23