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

Windows下Celery运行Scrapy提示ModuleNotFoundError: No module named 'app_celery'求助

问题根因

  1. 跨平台进程启动机制差异:Windows 下 Python 的 multiprocessing 库默认使用 spawn 模式创建子进程,而 Linux 默认使用 fork 模式。spawn 模式下子进程启动时会重新导入项目的根模块,若你启动 Celery 时的工作目录没有被加入 Python 的模块搜索路径 sys.path,就会出现找不到 app_celery 模块的报错。
  2. 代码逻辑错误:你创建多进程对象时给 target 参数传的是 scrape_data(),加了括号等于直接在当前 Celery 任务进程中同步执行了 scrape_data 函数,并没有把函数对象传递给子进程,也会导致逻辑异常。

解决方案

  • 修正代码参数错误:去掉 target 对应参数的括号,改为传递函数对象本身:
# 修正前
a = multiprocessing.Process(target=scrape_data())
# 修正后
a = multiprocessing.Process(target=scrape_data)
  • 在 app_celery.py 文件最顶部添加代码,手动把当前文件所在目录加入 Python 模块搜索路径:
import sys
import os
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))
  • 如果你不想修改代码,也可以在启动 Celery 前先设置 PYTHONPATH 环境变量,Windows cmd 下执行命令如下:
set PYTHONPATH=%cd%;%PYTHONPATH%
celery -A app_celery worker -c 4 -n worker1 --pool threads
  • 额外优化建议:你当前已经使用了 --pool threads 线程池启动 Celery,不需要额外嵌套开 multiprocessing 子进程跑 Scrapy 任务,直接在 Celery 任务函数内调用 scrape_data() 即可,既可以减少不必要的资源开销,也能直接规避跨平台多进程导入的问题。

内容的提问来源于stack exchange,提问作者iam.mattevans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:15:01