Django 异步和定时任务相关配置

Django 异步和定时任务相关配置


异步任务(celery)

  • 需要redis支持, redis下载安装,使用如下命令运行,默认
.\redis-server.exe redis.windows.conf   (windows下)
  • 安装
celery                             3.1.26.post2
celery-with-redis                  3.0
  • settings.py配置
# redis异步配置
BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Shanghai'
  • 修改settings.py同层级目录下的_init_.py文件
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ['celery_app']
  • 新建celery.py文件,和settings.py放在一起
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings

# set the default Django settings module for the 'celery_proj' program.
# 按照实际情况修改相关内容
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Data_forwarding.settings')
app = Celery('forwarding')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))
  • 完整的项目结构
├─Data_forwarding
│  │  celery.py
│  │  settings.py
│  │  urls.py
│  │  wsgi.py
│  │  __init__.py 
│          
├─forwarding
│  │  admin.py
│  │  apps.py
│  │  models.py
│  │  tasks.py
│  │  tests.py
│  │  views.py
│  │  __init__.py
│          
├─static
│      __init__.py
│      
└─templates
from celery import task

@task
def your_task():
"""
你的任务流程
"""
  • 而后在view里直接使用
your_task.delay()
  • 启动worker(确保redis已经启动)
# celery -A 你的项目名称(不是APP名) worker -l info
celery -A Data_forwarding worker -l info
  • 有如下输出则表示成功,开始愉快的DEBUG吧!
E:\PycharmProjects\Data_forwarding>celery -A Data_forwarding worker -l info

 -------------- celery@ihona-PC v3.1.26.post2 (Cipater)
---- **** -----
--- * ***  * -- Windows-10-10.0.17134-SP0
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app:         forwarding:0x2d8cff9f4a8
- ** ---------- .> transport:   redis://localhost:6379//
- ** ---------- .> results:     redis://localhost:6379/
- *** --- * --- .> concurrency: 8 (prefork)
-- ******* ----
--- ***** ----- [queues]
 -------------- .> celery           exchange=celery(direct) key=celery


[tasks]
  . Data_forwarding.celery.debug_task
  . forwarding.tasks.save_xml

定时任务(apscheduler.scheduler)

  • 安装APScheduler
pip install APScheduler==2.1.2
  • 在url中添加如下代码
from apscheduler.scheduler import Scheduler
from forwarding import views
# 定时任务
sched = Scheduler()
# 设置任务间隔时间
@sched.interval_schedule(seconds=10)
def send():
    # views.你的函数
    views.send_status0()

sched.start()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Django 内置的定时任务是使用 django-crontab 库来实现的。你可以使用如下方法调用其他的 .py 文件进行定时任务: 1. 在你的 Django 项目中创建一个名为 `cron.py` 的文件,在其中编写你的定时任务代码。 2. 在 Django 的 settings 文件中添加 `django_crontab` 应用到 `INSTALLED_APPS` 列表中。 3. 在你的 Django 项目的根目录下运行 `python manage.py crontab add` 命令来添加定时任务。 4. 在 `cron.py` 文件中添加以下代码来调用其他的 .py 文件: ``` from subprocess import call call(["python", "路径/文件名.py"]) ``` 例如: ``` from subprocess import call call(["python", "myapp/tasks.py"]) ``` 这样,每次定时任务执行时,都会调用 `tasks.py` 文件中的代码。 ### 回答2: Django内置的定时任务可以使用Celery库来调用其他的Python文件进行定时操作。Celery是一个常用的分布式任务队列框架,可以实现任务的异步执行和定时调度。 首先,需要在Django项目中安装Celery库。可以使用pip命令进行安装:`pip install celery` 接下来,在Django项目的settings.py文件中配置Celery的相关参数。需要设置broker_url,即消息代理(一般使用RabbitMQ或者Redis),以及result_backend,即结果存储方式。例如: ``` BROKER_URL = 'amqp://guest@localhost//' CELERY_RESULT_BACKEND = 'db+sqlite:///results.sqlite' ``` 然后,在Django项目的根目录下创建一个名为tasks.py的文件,用于定义定时任务的函数。在该文件中,可以导入其他需要调用的Python文件,并定义相应的任务函数。 ```python from celery import shared_task from other_module import some_function @shared_task def my_task(): some_function() ``` 在需要调用其他Python文件的地方,可以使用`from other_module import some_function`导入函数,然后在任务函数中直接调用即可。 接着,在项目的根目录下执行`celery -A project_name worker --beat`命令启动Celery的worker和定时任务调度,其中project_name为Django项目的名称。 最后,在需要调用定时任务的地方,可以使用`my_task.apply_async(countdown=10)`进行任务调度,其中countdown参数表示延迟执行任务的时间(以秒为单位)。 总结来说,使用Django内置的定时任务结合Celery库,可以方便地调用其他的Python文件进行定时操作。需要配置Celery的参数,定义定时任务的函数,并通过apply_async方法调用定时任务函数。 ### 回答3: 在Django中,可以使用第三方的定时任务库来调用其他的Python文件进行定时操作。其中比较常用的定时任务库是Celery和APScheduler。 1. 使用Celery: a. 首先,在项目的settings.py文件中配置Celery相关的设置,包括消息中间件、任务模块等。 b. 在需要定时执行的Python文件中,使用装饰器将其定义为Celery任务。 c. 创建一个定时任务配置文件,使用Celery的定时任务装饰器装饰需要定时执行的任务函数。 d. 启动Celery worker和beat进行任务的调度和执行。 2. 使用APScheduler: a. 首先,在Django的settings.py文件中配置APScheduler相关的设置。 b. 创建一个定时任务配置文件,定义一个继承了APScheduler的Scheduler类的类。 c. 在配置文件中通过add_job方法添加定时任务,其中指定要调用的Python文件和函数。 d. 启动APScheduler的定时任务调度器。 以上都是基本的操作流程,具体的实现方式和使用方法可以参考相关库的文档和示例代码。需要注意的是,由于Django是一个Web框架,一般情况下更推荐将定时任务与Web服务分离,并通过Celery等服务来执行定时任务,而不是直接在Django中执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值