celery的非同步任務與定時任務

2021-09-12 19:59:59 字數 1385 閱讀 1040

在django web平台開發中,碰到一些請求執行的任務時間較長(幾分鐘),為了加快使用者的響應時間,因此決定採用非同步任務的方式在後台執行這些任務。與此同時,celery除了非同步任務,還可以開啟定時任務,方便排程。

2 安裝需要的軟體包(按照順序安裝)

pip install celery

pip install celery-with-redis

pip install django-celery

3 因為async這個單詞在python3.7中已經作為系統關鍵字存在了,所以要把所有涉及到這個關鍵字的檔案都要改掉,涉及的檔案列表包含不限於:

/kombu/async

/celery/utils/timer2.py

/concurrency/asynpool.py

/kombu/transport/redis.py

/celery/worker/auto_scale.py,components,consumer,strategy

4 配置settings.py

5 新增task.py

#匯入非同步任務

from celery.task import task

#匯入定時任務庫

from celery.decorators import periodic_task

#利用引數來設定任務週期

@periodic_task(run_every=10)

def some_task():

print(『每10秒執行一次』)

time.sleep(5)

print(『執行完畢』)

return true

#通過裝飾器來註冊非同步任務

@task

def task_mail():

#例項化乙個物件

sendmail = sendmail(『歡迎註冊』,『您的驗證碼是1324』,   [『[email protected]』],default_from_email)

status = sendmail.do_send_mail()

if status:

print(『傳送郵件成功』)

else:

print(『傳送郵件失敗』)

6 新增celery.py

7 啟動服務

#非同步服務

celery -a mymac worker -l info

#定時任務服務

celery -a myproject beat -l info

8 但是執行非同步任務的時候發現服務自動斷掉,是因為python庫里的redis版本太高了。。。所以通過pip解除安裝,然後指定安裝低版本2.6.10

pip uninstall redis

pip install redis==2.6.10

Django 非同步任務 定時任務Celery

將任務分配給其他的程序去執行,django的主程序只負責發起任務,而執行任務的不在使用 django 的主程序。python 有乙個很棒的非同步任務框架,叫做 celery django為了讓開發者開發更加方便,整合了 celery,形成了django celery 外掛程式1.安裝django c...

使用celery執行非同步定時任務

建立乙個名叫tasks.py的檔案,裡邊單獨存放定時任務函式 from datetime import timedelta from django.utils import timezone from polls.models import user defcheck inactive user 檢...

Celery 定時任務

project celery task celery包 init py 包檔案 celery.py celery連線和配置相關檔案,且名字必須交celery.py tasks.py 任務體函式檔案 注意 任務體 檔案要與celery.py檔案在同乙個包下 beat也是乙個socket,啟動後會根據配...