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

Python循环中等待外部函数执行完成 解决多进程启动报错问题

问题根因

该报错是Python多进程启动规范问题,无需自行实现fork()或wait()逻辑:你调用的inference.convert_video函数内部使用了多进程处理逻辑,在默认采用spawn方式启动子进程的系统(Windows、macOS、部分Linux发行版)中,要求主模块的所有执行代码必须包裹在if __name__ == '__main__'判断块内,否则子进程初始化时会重复运行全局代码,反复触发新进程启动,就会抛出该错误。

修复方案

仅需将你现有的执行逻辑全部移入if __name__ == '__main__'包裹的主入口块即可,修改后代码如下:

import os
import glob
import inference

# 这里补充你原有的model初始化逻辑即可
# model = 你定义模型的代码

def main():
    video_names = glob.glob(os.path.join("input", "*.mp4"))
    num_videos = len(video_names)

    for ind, input_video in enumerate(video_names):
        output_green_screen = os.path.join(
                "output", os.path.splitext(os.path.basename(input_video))[0] + "_green_screen.mp4"
            )
        output_matte = os.path.join(
                "output", os.path.splitext(os.path.basename(input_video))[0] + "_matte.mp4"
            )
        inference.convert_video(
            model,
            device = "cuda",
            downsample_ratio = 0.4,
            input_source = input_video,
            output_type = "video",
            output_composition = output_green_screen,
            output_alpha = output_matte,
            output_video_mbps = 8, 
            seq_chunk = 4,
            num_workers = 1,
            progress = True
        )

if __name__ == '__main__':
    # 若后续需要打包为exe可执行文件,取消注释下两行即可,普通运行无需添加
    # from multiprocessing import freeze_support
    # freeze_support()
    main()

注意事项

  • convert_video内部已经实现了进程等待逻辑,函数执行完毕后会自动进入下一轮循环,无需额外添加同步控制代码
  • 原代码报错的核心原因是全局作用域直接写执行逻辑,不符合Python多进程的启动规范,修改结构后即可正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:45:05