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

aiomultiprocess:Worker创建两个进程而非一个的问题咨询

问题:aiomultiprocess Worker初始化时意外生成进程?

我参考aiomultiprocess官方用户指南编写了测试代码,通过psutil监控Python进程数:

import asyncio
import psutil
import multiprocessing
from aiomultiprocess import Worker
from time import sleep

def check_process_count():
    python_procs = [p for p in psutil.process_iter(attrs=["pid", "name"]) if "python" in p.info["name"]]
    print(f"Active Python-Processes: {[p.info['pid'] for p in python_procs]}")

async def wait():
  print('Wait 5')
  sleep(5.0)
  return('123')

async def program1():
  check_process_count()
  myprocess = Worker(target=wait, )
  check_process_count()
  print('myprocess = Worker(target=wait, )')
  myprocess.start()
  print('myprocess.start()')
  check_process_count()
  print(await myprocess.join())
  print('await myprocess.join()')

if __name__ == "__main__":
  asyncio.run(program1())

测试输出显示生成了两个新进程:

(test) ludger@lhnotebook:~/safe/sources/python/test$ python test.py
Active Python-Processes: [7585]
Active Python-Processes: [7585, 7586]
myprocess = Worker(target=wait, )
myprocess.start()
Wait 5
Active Python-Processes: [7585, 7586, 7592]
123
await myprocess.join()

其中第一个进程在Worker初始化时生成,不符合我对文档的预期;第二个在调用start()时生成属于正常情况,想知道这个现象背后的误解点是什么。


分析与解答

你对aiomultiprocess Worker的行为误解,核心在于混淆了它和标准库multiprocessing.Process的启动逻辑:

  • 标准库Process确实是在调用start()时才会创建子进程,但aiomultiprocess的Worker为了适配异步任务的执行,在初始化阶段就会创建一个辅助子进程,用于提前搭建异步运行环境(比如初始化asyncio事件循环),确保目标异步函数能在正确的环境中执行。
  • 你看到的初始化后出现的进程(7586)就是这个辅助进程,它会在后台准备异步运行时;当调用start()时,Worker才会真正启动执行目标函数的工作进程(7592)。
  • 这种设计是aiomultiprocess为了让异步任务能在多进程环境中高效运行而做的底层优化,和标准多进程的行为逻辑不同,这也是你产生预期偏差的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:11:03