ジャンゴ+ chereyの展開

ジャンゴ+ chereyの展開

1、オールドボーイズ参照:

http://www.cnblogs.com/alex3714/p/6351797.html

2、準備ができて

1、数据库部署
redis部署:

https://blog.csdn.net/feifeiyechuan/article/details/104463237

2、安装必要的包
pip install celery    
pip install django-celery-results    # 使用django存储数据
pip install redis
pip install django_celery_beat    # 安装调度器,调度器可以使用admin进行定时


3、安装数据库
python manage.py makemigrations    # 这个可以不用,但是最好运行一下
python manage.py migrate

4、创建超级用户
python manage.py createsuperuser


5、登录admin会发现多了表格,具体介绍在上述老男孩链接最后一部分有展示

3、カタログケース

4、設定セット

# djcelery.setup_loader()
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'visit_task',
    'django_celery_results',
    'django_celery_beat',
]

# celery
BROKER_URL = 'redis://:密码@ip地址:端口/0'  # redis://:password@hostname:port/db_number
CELERY_RESULT_BACKEND = 'django-db'  # 接收返回结果,保存至django数据库,但是install-app添加django_celery_results
CELERY_ACCEPT_CONTENT = ['application/json', ]
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = TIME_ZONE
CELERYD_PREFETCH_MULTIPLIER = 1 # worker每次取的任务数量
CELERYD_FORCE_EXECV = True  # 非常重要,有些情况下可以防止死锁
# # 每个celery worker再运行完后就死掉
CELERYD_MAX_TASKS_PER_CHILD = 40
# CELERY_ALWAYS_EAGER = True    # 如果开启,Celery便以eager模式运行, 则task便不需要加delay运行,别开啊,千万

5、セロリの設定

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery, platforms
from kombu import Exchange,Queue

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'follow_up_visit.settings')

app = Celery('follow_up_visit')

# Using a string here means the worker don't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings'

                       )

CELERY_TIMEZONE='Asia/Shanghai'  #并没有北京时区,与下面TIME_ZONE应该一致
# BROKER_URL='amqp://guest:guest@localhost:15672//'  #任何可用的redis都可以,不一定要在django server运行的主机上
# CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
# CELERY_RESULT_BACKEND = 'django-db'


# rabbitmq做MQ配置
# app = Celery('follow_up_visit', backend='amqp', broker='amqp://admin:admin@localhost')

# Load task modules from all registered Django app configs.
from django.conf import settings  # noqa

app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

# 允许root 用户运行celery
platforms.C_FORCE_ROOT = True

CELERYD_FORCE_EXECV = True  # 非常重要,有些情况下可以防止死锁


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))


# 定时任务
from celery.schedules import crontab, timedelta

app.conf.update(
    CELERYBEAT_SCHEDULE={
        # 'update_task': {
        #     'task': 'visit_task.tasks.update_task',
        #     'schedule': timedelta(seconds=10),
        #     'args': ()
        # },
        # 'schedule_task': {
        #     'task': 'visit_task.tasks.start_happyNewYear',
        #     'schedule': crontab(month_of_year=1, day_of_month=24, hour=12, minute=5),
        #     'args': ()
        # }
    }
)

6、__init__.py設定の設定の同じレベルを持ちます

from __future__ import absolute_import, unicode_literals
import pymysql

# load mysql
pymysql.install_as_MySQLdb()

# load celery
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app

__all__ = ['celery_app']

7、task.py

from celery import shared_task, task

8、コール

9、startコマンド

conda activate py368
export PYTHONIOENCODING=utf-8

nohup python manage.py runserver 0.0.0.0:7068 &    # 启动django服务
celery -A follow_up_visit worker -l info    # 启动一个worker


# 关闭celery
ps auxww | grep 'celery' | awk '{print $2}' | xargs kill -9


# redis操作:
# 清空redis

redis-cli -a 123456
flushall
exit






# 其他
(1)
celery multi start w1 -A 项目名 --loglevel=INFO # w1,w2为指定worker的名称,一次也是启动给一个,但是不会有实时日志显示在shell中,可以实现分布式。生产商使用

(2) 
启动beat调度器才能执行这个任务计划。django只是保存调度任务

celery -A 项目名 beat -l info -S django		# -S 表示从哪儿读取调度任务(新增需要重启)
然后启动worker就可以了

eg:
celery multi restart w1 -A 项目名 -l info 	# 重启worker w1
celery multi stop w2	# 停止worker w2

如果一直不发调度任务,需要清空数据库,积压了很多任务先去执行


(3)关于返回结果
创建调用
from task import add
res = add.delay()	# 执行异步任务
res.get(timeout=1)		# 可以获取到return的执行结果,如果不写timeout会一直监测直到返回结果
res.get(propagate=False)	# 不会报使程序报错的异常
res.ready()	# 获取执行状态,是否准备好,是否完成
res.task_id 	# 获取id
from celery.result import AsyncResult 
res = AsyncResult (task_id)	# 通过task_id 获取结果
res,status		# 任务状态	PENDING + SUCCESS
res.get()		# 获取结果
res.trace_task #  追踪错误信息

 

 

 

#RabbitMQの他)がストアにデータベースを使用する:(ない、あまりにも乱雑です

1、ジャンゴ+セロリは非同期で実行しました

手順:https://ops-coffee.cn/s/lXrp3igYo9W2UuE5Gauysg

インストールの内容:

インストールリファレンス:https://blog.csdn.net/m0_37034294/article/details/82839494(勝利)

(1)アーランインストール

https://www.erlang.org/downloads

(2)のRabbitMQサーバーインストール

https://www.rabbitmq.com/download.html

 

2、サーバーの展開プロセス

(1)、容器を開けます。

ジャンゴ:

sudoのドッキングウィンドウの実行-it -p 7080:8000 --name = 'suifang_v1.0' --network sf_network --network-エイリアスSF-ネットワークubuntu_tfgpu_py36:v1.0を/ binに/ bashの

 

MySQLの:

ドッキングウィンドウの実行-d -e MYSQL_ROOT_PASSWORD = 123456 -p 7083:3306 --network sf_network --network-エイリアスSF-ネットワーク--name mysql_suifang_v1.0のmysql

 

容器に、スイッチング環境:

condaアクティブpy368

 

 

https://www.jianshu.com/p/6dd13d39d613

 

(2)、コードを引っ張っ

 

(3)、セロリマウント

、取り付けのRabbitMQサーバのデータベースサービス(abbitmq DOキュー)(参考:RabbitMQのインストールと初期設定https://www.cnblogs.com/chrischennx/p/7071471.html

RabbitMQのサーバーをインストールapt-getを

 

サービスを開始します。

オープンサービスへのRabbitMQサーバーの開始(長いほど)

RabbitMQのサーバ停止ストップサービス

rabbitmqctlステータス表示の状態

 

nohupをRabbitMQのサーバ起動&

 

B、インストールcherey

ピップセロリをインストール

 

(4)のDjangoのバージョンを確認します

ピップインストールジャンゴ== 2.0.6 -i https://pypi.douban.com/simple

 

(5)、インストールパッケージ

ピップインストールPyMySQL -i https://pypi.douban.com/simple

ピップインストールのWebSocket -i https://pypi.douban.com/simple

-iクライアントインストールのWebSocket PIP https://pypi.douban.com/simple(修正されたソースコード)

パス:/root/miniconda3/envs/py368/lib/python3.6/site-packages/websocket/84行パラメータ:, cur_message =なし、SEND_MESSAGE = Noneを追加せず、プロセスに追加__init__:self.cur_message = cur_message self.send_message = SEND_MESSAGE

 

ピップリクエストをインストール-i https://pypi.douban.com/simple

 

(6)、Cherery開始

スタートワーカー待ちタスク

PIP eventlet取付eventlet(エラー防止)をインストール

セロリ-A follow_up_visitワーカー-l情報-Pのeventlet(窓は-P eventletエラーを防ぎます)

 

nohupをセロリ-A follow_up_visit労働者-lインフォメーション&

 

 

スタートビートタスクのスケジューリング

セロリの-A follow_up_visitは-l情報を倒します

 

nohupをセロリ-A follow_up_visitビート-lインフォメーション&

 

すべてのスタート

セロリ-Aプロジェクト名の労働者-b -l情報

 

(7)のDjangoプロジェクトを開始します

nohupをPythonのmanage.pyのrunserver 0.0.0.0:8000&

 

(8)動作の概要:

CDを/ tmp / follow_up_visit

condaアクティブpy368

nohupをRabbitMQのサーバ起動&

nohupをPythonのmanage.pyのrunserver 0.0.0.0:8000&

nohupをセロリ-A follow_up_visitビート-lインフォメーション&

nohupをセロリ-A follow_up_visit労働者-lインフォメーション&

 

#关闭セロリ
PS auxww | grepの'セロリ' | awkは'{$ 2印刷}' | xargsが殺す-9

公開された84元の記事 ウォンの賞賛149 ・は 50000 +を見て

おすすめ

転載: blog.csdn.net/feifeiyechuan/article/details/103902453