flask celery redis實現非同步任務

2021-10-24 19:25:51 字數 4296 閱讀 7218

2、搭建目錄

3、啟動專案測試

pip3 install flask

pip3 install redis==3.5.3

pip3 install celery==5.0.0

1.2.1 安裝

1、安裝gcc

yum install -y gcc
wget 

tar -zxvf redis-5.0.3.tar.gz

3、切換到解壓目錄下,編譯

cd redis-5.0.3

make

如果編譯報如下錯誤

將make編譯命令替換成如下命令

make malloc=libc
4、安裝並安裝指定目錄

make

install prefix=/usr/local/redis

5、設定後台啟動服務

修改 redis.conf 檔案,把 daemonize no 改為 daemonize yes

啟動測試:

./redis-server redis.conf
6、設定開機自啟動(設定成服務)

vi /etc/systemd/system/redis.service
複製如下內容

[unit]

description=redis-server

after=network.target

[service]

type=forking

execstart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf

privatetmp=true

[install]

wantedby=multi-user.target

設定開機啟動

[root@localhost bin]# systemctl daemon-reload

[root@localhost bin]# systemctl start redis.service

[root@localhost bin]# systemctl enable redis.service

7、設定軟連線

ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis
1.2.2 補充設定密碼–(此文不需要)

本文測試為了簡單,暫不設定redis密碼

以下是設定redis密碼以及將redis密碼還原的過程,特此記錄一下

1、進入redis

redis
2、檢視密碼

config get requirepass
可以看出並沒有設定密碼

3、設定密碼為123456

再使用config get requirepass,顯示需要認證

4、修改為無密碼

1、認證

auth 123456

2、設定為無密碼

1.2.3 查詢命令

1、切換資料庫

select 1

2、查詢

keys *

3、根據鍵值查詢

get 鍵名

import os

class

config

(object):

basedir = os.path.abspath(os.path.dirname(__file__)

) debug =

true

testing =

false

class

projectconfig

(config)

: celery_broker_url =

"redis://localhost:6379/0"

celery_result_backend =

"redis://localhost:6379/1"

from flask import flask

from api.create_task import task

'settings.projectconfig'

)'/req'

)if __name__ ==

'__main__'

:)

# task:任務

# broker(中間人):儲存任務的佇列

# worker:真正執行任務的工作者

# backend:用來儲存任務執行後的結果

from celery import celery

import time

celery = celery(

"tasks"

, broker=

"redis://localhost:6379/0"

, backend=

"redis://localhost:6379/1"

)@celery.task #加上此裝飾器,這個函式就變成celery任務了(task)

defsend_mail()

:print

('郵件開始傳送....'

) time.sleep(10)

print

('郵件傳送結束!'

)

from flask import blueprint

from task.tasks import send_email

task = blueprint(

'task'

,__name__)

@task.route(

'/add_task'

,methods=

['get'])

defadd_task()

:"""

新增任務

:return:

"""send_email.delay(

)return

'新增成功 !!!'

1、啟動任務監聽

切換到專案目錄下

celery -a celery_task.tasks worker --loglevel=info
注意:如果報錯:bash: celery: 未找到命令…

執行以下命令

export path=/usr/local/python3/bin:$path

# /usr/local/python3為python3編譯資料夾

echo

'export path=/usr/local/python3/bin:$path'

>> /etc/profile.d/python3.sh # 避免重啟丟失

Silverlight實現呼叫多個非同步任務

public enum actionstatus 這個記錄了任務的結果 public class actionresult 任務名稱 public string taskname 狀態 public actionstatus status 訊息 public string message 任務結果 ...

redis crontab php非同步處理任務

2016年1月8日 16 08 43 星期五 情景 使用者登入日誌,發郵件,發簡訊等等實時性要求不怎麼高的業務通常會非同步執行 之前接觸過幾種redis crontab配套的實現方法,比如 crontab定時執行curl指令碼 1.用curl 訪問url執行php指令碼去pop佇列 2.php程式p...

springboot整合定時任務與非同步任務

新增配置資訊 spring給我們配的執行緒池 spring task execution pool core size 5 max size 50建立乙個定時任務配置類 enablescheduling 開啟定時任務功能 enableasync 開啟非同步任務功能 開啟非同步任務功能 enablea...