在cugbacm@AY14040915414956495eZ:~/oj/oj/oj目录下的setting文件中:
djcelery配置:
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'djcelery', 'cugbacm', 'pagination' )
import djcelery djcelery.setup_loader()
celery和rabbitmq配置:
import sys CELERY_IMPORTS = ( 'cugbacm.views.problem', 'cugbacm.views.contest_problem', 'cugbacm.views.rejudge', ) CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler" from cugbacm.models import Submit from datetime import timedelta from cugbacm.views.problem import Judge, test from cugbacm.views.contest_rank_update import update_running_contest_rank CELERYBEAT_SCHEDULE = { 'add-every-60-seconds': { 'task': 'cugbacm.views.contest_rank_update.update_running_contest_rank', 'schedule': timedelta(seconds=60), 'args': ([]), } } CELERY_TIMEZONE = 'Asia/Shanghai' BROKER_HOST = "127.0.0.1" BROKER_PORT = 5672 BROKER_USER = "guest" BROKER_PASSWORD = "guest" BROKER_VHOST = "/"
celery'的task文件:
cugbacm@AY14040915414956495eZ:~/oj/oj/oj目录下的celery.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' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'oj.settings') app = Celery('oj') # Using a string here means the worker will not have to # pickle the object when using Windows. 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))
重启celery:sh celery_restart.sh
cugbacm@AY14040915414956495eZ:~/oj/oj目录下celery_restart.sh文件:
ps -ef|grep celery|grep -v grep|cut -c 9-15|xargs kill -9 nohup python manage.py celeryd -B -D -l info
由于没有了解内核是怎样实现的,所以具体内核怎样发送判题任务我不太清楚,期待boss朱后期补充。。。