【发布时间】:2016-09-09 07:37:19
【问题描述】:
在我的 celery 任务中,我有一个使用在 GPU 上运行的 python 模块(theano)的任务,该模块只能由一个线程同时导入。但要启动网站,我必须运行:
python manage.py runserver
celery -A celery_try worker -l info
所以模块会被 celery 和 django 网站都导入,这是冲突的。有没有办法解耦 Django 和 Celery,使模块只导入一次?
【问题讨论】:
-
我不知道为什么运行这两个进程意味着你必须在两个进程中都导入模块。如果您不想将其导入其中之一,那就不要。
-
在 Django 视图中,我导入了任务,因此 Django 服务器导入相同的模块 tasks.py 导入,而 celery 也导入任何 tasks.py 导入,这就是两个进程导入模块的方式。
-
celery 本身默认在 django 之外运行!这就是你初始化它的方式,例如如果您的模块正在加载所有 django 堆栈和所有 django 应用程序
-
还有一件事 - 每个工作人员将在自己的子进程或线程中运行 - 所以如果你有 2 个工作人员,每个工作人员都会加载 theano 模块并且你会遇到同样的问题,也许编写你自己的最小服务器到处理任务,您将确保它运行一次,并且您可以完全控制它的运行方式
标签: python django celery django-celery