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

在Celery任务中导入rembg导致Worker进程异常退出

解决思路

这个错误是macOS系统下Celery的fork进程机制和rembg依赖的ObjC初始化逻辑冲突导致的:Celery默认用fork创建子进程,而rembg依赖的部分库(比如onnxruntime、PIL相关组件)会触发macOS的ObjC初始化安全检查,fork后的子进程无法安全完成初始化,直接崩溃退出。

以下是可行的解决方法:

  • 切换Celery的进程池类型
    放弃默认的fork模式,改用spawn或solo启动子进程:

    • 开发环境可以用单进程模式:celery -A oml worker --loglevel=info --pool=solo
    • 生产环境推荐用spawn池:celery -A oml worker --loglevel=info --pool=spawn
  • 延迟导入rembg库
    不要在任务模块的顶部导入rembg,而是在任务函数内部才导入,让fork后的子进程单独加载库,避免主进程提前触发ObjC初始化:

    from celery import shared_task
    
    @shared_task
    def image_background_remove(image_path):
        # 只在任务执行时才导入rembg
        from rembg import remove
        # 后续处理逻辑
        with open(image_path, 'rb') as img_file:
            processed_data = remove(img_file.read())
        # 保存处理结果等操作
    
  • 临时禁用ObjC的fork安全检查
    在启动Celery Worker前设置环境变量,强制系统忽略这个安全检查(注意:此方法有潜在稳定性风险,仅作为临时应急方案):

    export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
    celery -A oml worker --loglevel=info
    
  • 调整rembg依赖版本
    尝试切换到兼容性更好的rembg版本,比如安装稳定版:

    pip install rembg==2.0.50
    

    同时检查onnxruntime是否适配你的macOS架构(arm64/x86_64),必要时指定架构安装:

    pip install onnxruntime --force-reinstall --no-deps --platform=macosx_11_0_arm64
    

内容的提问来源于stack exchange,提问作者Cesar Jr Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:56:10