python Celery redis 實現非同步

2021-10-01 10:14:17 字數 2429 閱讀 6412

1 安裝celery 和redis庫

pip install celery-

with

-redis

解除安裝 3.0以上版本的redis,安裝2.1版本的redis 注:此處是乙個坑

pip uninstall redis

pip install redis==

2.10

.6

2 安裝本地redis資料庫 此處不做說明,後續對資料庫梳理時再做說明

3 開始celery編碼

# -*- coding: utf-8 -*-

# @author: roble

# @date: 2019-10-15 20:24:55

# @last modified by: roble

# @last modified time: 2019-12-12 22:15:15

import time

from celery import celery

broker =

'redis:'

backend =

'redis:/0'

'tasks'

, broker=broker, backend=backend)

defadd

(x, y)

:#time.sleep(1) # 模擬耗時操作

print

("*****==6666"

)return

"send successful"

# 主函式 呼叫celery

print

(">>>>進入主方法,開始呼叫celery任務。。。"

)answer=add.delay(4,

4)print

(">>>>任務唯一id:%s"

%answer.id)

# answer.id 獲取任務的唯一id

async

= asyncresult(

id=answer.

idtime.sleep(3)

# async.get()

ifasync

.successful():

result =

async

.get(

)print

(">>>>任務呼叫成功,返回值:%s"

%result)

#獲取方法返回值

# result.forget() # 將結果刪除

elif

async

.failed():

print

(">>>>執行失敗"

)elif

async

.status ==

'pending'

:print

(">>>>任務等待中被執行"

)elif

async

.status ==

'retry'

:print

(">>>>任務異常後正在重試"

)elif

async

.status ==

'started'

:print

(">>>>任務已經開始被執行"

)

4 測試

在window中開啟命令列模式,進入編碼資料夾目錄下啟動celery

celery -a task worker -l info -p threads
見到以下情況說明celery已正常啟動

cmd開啟第二個dos視窗,執行主函式,呼叫celery任務

5 redis 中資料簡單介紹

主函式呼叫後會往redis資料庫中寫入一對鍵值,該鍵對應的值為list型別

Django redis celery實現非同步任務

1 django中的非同步請求 同步請求 所有邏輯處理 資料計算任務在view中處理完畢後返回response。在view處理任務時使用者處於等待狀態,直到頁面返回結果。2 celery celery是基於python開發的乙個分布式任務佇列框架,支援使用任務佇列的方式在分布的機器 程序 執行緒上執...

關於DeviceIoControl實現非同步的筆記

鏈結位址 一直所做的都是同步實現的。當然很多情況這並不是很好的解決問題。現在手上的問題是 使用者層通知底層驅動 filter driver 做某件事,然後返回該事件執行的結果。如果該事件是一件簡單的事情,這裡是指極短時間內可以完成的,那麼在允許範圍內,我們可以用同步來完成。但是如果該事件是一件耗時的...

異方差 Python實現

借鑑一位博主的文章,結合兩篇,用於實現python 本人親測,可以跑通。這位博主的 字母有連一起的,以下是我親測的 import pandas as pd import numpy as np from patsy import dmatrices from statsmodels.stats.ou...