我正在开发一个使用Celery的小型独立python应用程序。我使用django框架构建了这个,但我的应用程序只是后端。这意味着用户不需要访问我的站点,我的应用程序只是为了从celery接收任务队列和在数据库上执行操作而构建的。为了对数据库执行操作,我需要使用Django模块。
我想要做的是消除我的django应用程序的其余部分并仅使用celery和django模型模块(包括运行这些模块所需的依赖项)。
简而言之,我的简单芹菜应用程序将运行接收来自我的redis代理的指令,并使用django模型在数据库中执行操作。
可以这样做吗?如果是这样,怎么样?
这是我的项目结构:
myproject/
--manage.py
--myproject/
----celery.py
----models.py
----settings.py
----tasks.py
----urls.py
----wsgi.py
这是我的settings.py:
答案 0 :(得分:1)
在项目的settings.py中,只需在开头添加。
import django
import os
sys.path.insert(0, your_project_path) # Ensure python can find your project
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
django.setup()
然后你可以使用django orm,记得在django设置中删除你不需要的中间件。
答案 1 :(得分:0)
你只需要
env['DJANGO_SETTING_MODULE'] = 'myproject.settings'
django.setup()
(假设您在settings.py中设置了数据库和installed_apps内容)
答案 2 :(得分:0)
你有一个需要一些芹菜任务的python脚本,你也需要Django ORM才能进行数据库交互。
您可以设置django项目
为您的目的创建一个应用,包含在settings.py中,并在models.py中的应用内部创建所需的模型。 参考:What minimal files i need to use django ORM
设置执行芹菜的环境。即,redis服务器。将“djcelery”与django项目整合在一起。为芹菜任务目的。 您可以使用芹菜节拍进行周期性任务。或延迟。 参考:http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html
您可以在芹菜任务中导入和使用正常的django模型。
您可以使用
运行芹菜任务我。芹菜 - 任务工作者--loglevel = info
II。芹菜 - 任务击败-l info。如果您想要为定期执行而编写的任务,请使用beats。
如果需要立即或在一段时间间隔后异步执行任务,则可以使用task_name.delay() 使用delay()调用python脚本中的任务 我想在你的脚本中使用djcelery你可能需要在脚本中设置django env。 只需做django.setup()。
我认为这可以帮助您解决问题。