讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在 Python 多进程间正确传递类实例方法

夏萱小哥_9270

夏萱小哥_9270

发布时间:2026-01-15 10:28:02

|

930人浏览过

|

来源于php中文网

原创

如何在 Python 多进程间正确传递类实例方法

python 的 multiprocessing 无法直接序列化绑定方法(如 `obj.method`),因其依赖于不可跨进程传递的实例引用;正确做法是将逻辑封装为可调用函数,或确保实例创建和方法调用均发生在子进程中。

在使用 multiprocessing.Process 时,目标函数(target)必须是可被 pickle 序列化的对象——这是进程间传递函数和参数的基础。而类的绑定实例方法(例如 instance.method)在默认情况下无法被正确序列化,因为 self 引用指向的是父进程中的内存对象,子进程无法访问该地址空间。

你最初尝试的代码存在两个关键问题:

  1. 方法定义缺失 self 参数:def sleeper(sec): 是一个静态签名,但被声明为实例方法(无 @staticmethod 装饰),导致调用时参数不匹配;
  2. 错误地试图跨进程传递已绑定方法:sleepingClass.sleeper 是一个绑定方法对象,其底层包含对父进程实例的引用,无法安全传输到子进程。

✅ 正确解法是:让实例的创建和方法调用都发生在子进程中,而非在主进程中创建实例再传入。这样每个进程拥有独立的内存副本,避免序列化瓶颈。

Windows 日历同步
Windows 日历同步

将提醒同步至 Windows/Outlook 日历。用户提及「提醒我」「设置提醒」「加到日历」「同步到日历」「日程」「calendar」「日历」时触发。支持Microsoft Graph API 设备代码流认证,无需 Web 服务器,直接写入用户 Outlook 日历。

下载

以下是推荐的三种实践方式:

立即学习“Python免费学习笔记(深入)”;

✅ 方式一:在目标函数中创建并调用实例(最推荐)

import multiprocessing
import time

class SleepingClass:
    def __init__(self, sec):
        self.sec = sec

    def sleeper(self):
        print(f'sleeping for {self.sec} seconds...')
        time.sleep(self.sec)

def run_sleeper(sec):
    # 子进程中创建实例并执行
    instance = SleepingClass(sec)
    instance.sleeper()

if __name__ == "__main__":
    process = multiprocessing.Process(target=run_sleeper, args=(2,))
    process.start()
    process.join()  # 等待完成,便于观察输出

✅ 方式二:使用 functools.partial 预设参数(适用于简单场景)

from functools import partial
import multiprocessing
import time

class SleepingClass:
    def __init__(self, sec):
        self.sec = sec

    def sleeper(self):
        print(f'sleeping for {self.sec} seconds...')
        time.sleep(self.sec)

if __name__ == "__main__":
    # 注意:不能直接传 sleepingClass.sleeper!
    # 而应通过工厂函数 + partial 构造可序列化目标
    def create_and_run(sec):
        SleepingClass(sec).sleeper()

    process = multiprocessing.Process(target=create_and_run, args=(3,))
    process.start()
    process.join()

⚠️ 注意事项

  • ❌ 不要尝试 pickle 绑定方法(如 pickle.dumps(obj.method)),会抛出 AttributeError 或 TypeError;
  • ✅ 所有共享数据需通过 multiprocessing.Queue、multiprocessing.Pipe 或 multiprocessing.Manager 显式传递;
  • ✅ 始终在 if __name__ == "__main__": 下启动进程,尤其在 Windows 上防止递归创建子进程;
  • ✅ 使用 process.join() 同步主进程,避免主程序提前退出导致子进程被终止。

总结:多进程不是“复制对象”,而是“复制执行环境”。把类实例的生命周期限制在单个进程中,是保证健壮性和可移植性的核心原则。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3199

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2778

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

1488

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

2539

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3270

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1597

2023.08.10

windows boot manager
windows boot manager

windows boot manager无法开机的解决方法:1、系统文件损坏,使用Windows安装光盘或USB启动盘进入恢复环境,选择修复计算机,然后选择自动修复;2、引导顺序错误,进入恢复环境,选择命令提示符,输入命令"bootrec /fixboot"和"bootrec /fixmbr",然后重新启动计算机;3、硬件问题,使用硬盘检测工具进行扫描和修复;4、重装操作系统。本专题还提供其他解决

2477

2023.08.28

windows锁屏快捷键
windows锁屏快捷键

windows锁屏快捷键是Windows键+L、Ctrl+Alt+Del、Windows键+D、Windows键+P和Windows键+R。本专题为大家提供windows相关的文章、下载、课程内容,供大家免费下载体验。

4787

2023.08.30

Revel框架入门与安装配置
Revel框架入门与安装配置

本专题从Revel框架环境搭建讲起,系统介绍命令行工具安装、项目创建、目录结构、配置文件及热代码重载,帮助开发者快速完成首个Go Web应用。

0

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn