celery 设置多少时间后运行
许多Django应用需要执行异步任务, 以便不耽误http request的执行. 我们也可以选择许多方法来完成异步任务, 使用Celery是一个比较好的选择, 因为Celery
有着大量的社区支持, 能够完美的扩展, 和Django结合的也很好. Celery不仅能在Django中使用, 还能在其他地方被大量的使用. 因此一旦学会使用Celery, 我
们可以很方便的在其他项目中使用它.
1. Celery版本
本篇博文主要针对Celery 3.0.x. 早期版本的Celery可能有细微的差别.
2. Celery介绍
Celery的主要用处是执行异步任务, 可以选择延期或定时执行功能. 为什么需要执行异步任务呢?
第一, 假设用户正发起一个request, 并等待request完成后返回. 在这一request后面的view功能中, 我们可能需要执行一段花费很长时间的程序任务, 这一时间
可能远远大于用户能忍受的范围. 当这一任务并不需要立刻执行时, 我们便可以使用Celery在后台执行, 而不影响用户浏览网页. 当有任务需要访问远程服务器完
成时, 我们往往都无法确定需要花费的时间.
第二则是定期执行某些任务. 比如每小时需要检查一下天气预报, 然后将数据储存到数据库中. 我们可以编写这一任务, 然后让Celery每小时执行一次. 这样我们
的web应用便能获取最新的天气预报信息.
我们这里所讲的任务task, 就是一个Python功能(function). 定期执行一个任务可以被认为是延时执行该功能. 我们可以使用Celery延迟5分钟调用function
task1, 并传入参数(1, 2, 3). 或者我们也可以每天午夜运行该function.
我们偏向于将Celery放入项目中, 便于task访问统一数据库和Django设置.
当task准备运行时, Celery会将其放入列队queue中. queue中储存着可以运行的task的list. 我们可以使用多个queue, 但为了简单, 这里我们只使用一个.
将任务task放入queue就像加入todo list一样. 为了使task运行, 我们还需要在其他线程中运行的苦工worker. worker实时观察着代运行的task, 并逐一运行这
些task. 你可以使用多个worker, 通常他们位于不同服务器上. 同样为了简单起见, 我们这只是用一个worker.
我们稍后会讨论queue, worker和另外一个十分重要的进程, 接下来我们来动动手:
3. 安装Celery
我们可以使用pip在vietualenv中安装:
pip install django-celery
4. Django设置
我们暂时使用django runserver来启动celery. 而Celery代理人(broker), 我们使用Django database broker implementation. 现在我们只需要知道Celery
需要broker, 使用django自身便可以充当broker. (但在部署时, 我们最好使用更稳定和高效的broker, 例如Redis.)
在settings.py中:
import djcelery
djcelery.setup_loader()
BROKER_URL = ’django://’
…
INSTALLED_APPS = (
…
’djcelery’,
’kombu.transport.django’,
…
)
第一二项是必须的, 第三项则告诉Celery使用Django项目作为broker.
在INSTALLED_APPS中添加的djcelery是必须的. kombu.transport.django则是基于Django的broker
最后创建Celery所需的数据表, 如果使用South作为数据迁移工具, 则运行:
python manage.py migrate
否则运行: (Django 1.6或Django 1.7都可以)
python manage.py syncdb
5. 创建一个task
正如前面所说的, 一个task就是一个Pyhton function. 但Celery需要知道这一function是task, 因此我们可以使用celery自带的装饰器decorator: @task. 在
django app目录中创建taske.py:
from celery import task
@task()
def add(x, y):
return x + y
当settings.py中的djcelery.setup_loader()运行时, Celery便会查看所有INSTALLED_APPS中app目录中的tasks.py文件, 找到标记为task的function, 并
将它们注册为celery task.
将function标注为task并不会妨碍他们的正常执行. 你还是可以像平时那样调用它: z = add(1, 2).
6. 执行task
让我们以一个简单的例子作为开始. 例如我们希望在用户发出request后异步执行该task, 马上返回response, 从而不阻塞该request, 使用户有一个流畅的访问
过程. 那么, 我们可以使用.delay, 例如在在views.py的一个view中:
from myapp.tasks import add
…
add.delay(2, 2)
…
Celery会将task加入到queue中, 并马上返回. 而在一旁待命的worker看到该task后, 便会按照设定执行它, 并将他从queue中移除. 而worker则会执行以下代
码:
import myapp.tasks.add
myapp.tasks.add(2, 2)
7. 关于import
这里需要注意的是, 在impprt task时, 需要保持一致. 因为在执行djcelery.setup_loader()时, task是以INSTALLED_APPS中的app名,
加.tasks.function_name注册的, 如果我们由于python path不同而使用不同的引用方式时(例如在tasks.py中使用from myproject.myapp.tasks import
add形式), Celery将无法得知这是同一task, 因此可能会引起奇怪的bug.
8. 测试
a. 启动worker
正如之前说到的, 我们需要worker来执行task. 以下是在开发环境中的如何启动worker:
首先启动terminal, 如同开发django项目一样, 激活virtualenv, 切换到django项目目录. 然后启动django自带web服务器: python manage.py runserver.
然后启动worker:
python manage.py celery worker –loglevel=info
此时, worker将会在该terminal中运行, 并显示输出结果.
b. 启动task
打开新的terminal, 激活virtualenv, 并切换到django项目目录:
$ python manage.py shell
》》》 from myapp.tasks import add
》》》 add.delay(2, 2)
此时, 你可以在worker窗口中看到worker执行该task:
[2014-10-07 08:47:08,076: INFO/MainProcess] Got task from broker: myapp.tasks.add[e080e047-b2a2-43a7-af74-d7d9d98b02fc]
[2014-10-07 08:47:08,299: INFO/MainProcess] Task myapp.tasks.add[e080e047-b2a2-43a7-af74-d7d9d98b02fc] succeeded in 0.183349132538s: 4
9. 另一个例子
下面我们来看一个更为真实的例子, 在views.py和tasks.py中:
# views.py
from myapp.tasks import do_something_with_form_data
def view(request):
form = SomeForm(request.POST)
if form.is_valid():
data = form.cleaned_data
# Schedule a task to process the data later
do_something_with_form_data.delay(data)
return render_to_response(…)
# tasks.py
@task
def do_something_with_form_data(data):
call_slow_web_service(data[’user’], data[’text’], …)
10. 调试
由于Celery的运行需要启动多个部件, 我们可能会漏掉一两个. 所以我们建议:
使用最简单的设置
使用python debug和logging功能显示当前的进程
11. Eager模式
如果在settings.py设置:
CELERY_ALWAYS_EAGER = True
那么Celery便以eager模式运行, 则task便不需要加delay运行:
# 若启用eager模式, 则以下两行代码相同
add.delay(2, 2)
add(2, 2)
12. 查看queue
因为我们使用了django作为broker, queue储存在django的数据库中. 这就意味着我们可以通过django admin查看该queue:
# admin.py
from django.contrib import admin
from kombu.transport.django import models as kombu_models
admin.site.register(kombu_models.Message)
13. 检查结果
每次运行异步task后, Celery都会返回AsyncResult对象作为结果. 你可以将其保存, 然后在将来查看该task是否运行成功和返回结果:
# views.py
result = add.delay(2, 2)
…
if result.ready():
print “Task has run“
if result.successful():
print “Result was: %s“ % result.result
else:
if isinstance(result.result, Exception):
print “Task failed due to raising an exception“
raise result.result
else:
print “Task failed without raising exception“
else:
print “Task has not yet run“
14. 定期任务
还有一种Celery的常用模式便是执行定期任务. 执行定期任务时, Celery会通过celerybeat进程来完成. Celerybeat会保持运行, 一旦到了某一定期任务需要执
行时, Celerybeat便将其加入到queue中. 不像worker进程, Celerybeat只有需要一个即可.
启动Celerybeat:
python manage.py celery beat
使Celery运行定期任务的方式有很多种, 我们先看第一种, 将定期任务储存在django数据库中. 即使是在django和celery都运行的状态, 这一方式也可以让我们
方便的修改定期任务. 我们只需要设置settings.py中的一项便能开启这一方式:
# settings.py
CELERYBEAT_SCHEDULER = ’djcelery.schedulers.DatabaseScheduler’
谁能告诉我:两个芹菜celery和 parsley的区别
你好:1、celery是芹菜,又名蒲芹、药芹、楚葵、旱芹、香芹、胡芹,在我国栽种已久,繁衍约已两千多年,自古以来它独特的芳香辛味,深得人们的喜爱。据研究报告显示,芹菜叶中抗坏血酸含量为158.8%毫克,远远超过芹菜茎的27.4%毫克的含量,也超过蜜柑的131.5%毫克的含量。
2、parsley是西芹,又名欧芹、荷兰芹,它的原产地在中东的叙利亚高原。远在希腊、罗马时代,西芹便被当做医药和香辣调味料来使用。因此,它也可称是具有悠久历史的蔬菜。到了18世纪,它自荷兰传入国内,故又名荷兰芹。
西芹含有惊人的营养,维生素C的含量是柠檬的2.5倍以上。维生素C的无法在人体内制造,也无法贮存在人体的物质,因此应该每天摄取。
有关蔬菜和水果的英语单词
水果
apple 苹果
pear 梨
apricot 杏
peach 桃
grape 葡萄
banana 香蕉
pineapple 菠萝
plum 李子
watermelon 西瓜
orange 橙
lemon 柠檬
mango 芒果
strawberry 草莓
medlar 枇杷,欧查果
mulberry 桑椹
nectarine 油桃
cherry 樱桃
pomegranate 石榴
fig 无花果
tangerine 柑子
persimmon 柿子
walnut 胡桃
hazelnut 榛子
peanut 花生
date 枣
chestnut 粟
currant 醋粟
coconut, cocoanut 可可
bilberry 越桔
blackberry, blueberry 黑莓
avocado 鳄梨
black currant 红醋栗
blood orange 红橙
citron, grapefruit 香橼
damson 大马士革李
almond 巴旦杏
nutmeg 肉豆蔻
papaya, papaw 番木瓜
guava 番石榴
pistachio 阿月浑子
prickly pear 仙人掌果
raspberry 覆盆子
soursop 刺果番荔枝
常见的蔬菜(vegetable):
pepper 胡椒
hot pepper; chilli 辣椒
sweet pepper; bell pepper; pimiento; capsicum 甜椒, 柿子椒
tomato 番茄,西红柿
asparagus 芦笋
cucumber 黄瓜
aubergine, eggplant 茄子
bean 菜豆
beet, beetroot 甜菜
potato 马铃薯
carrot 胡萝卜
cauliflower 菜花,花椰菜
pumpkin 西葫芦
broad bean 蚕豆
cabbage 圆白菜,卷心菜
garlic 蒜
chive 细香葱
fennel 茴香
cos lettuce 莴苣
marrow 嫩葫芦
melon 香瓜,甜瓜
celery 芹菜
onion 韭
leek 韭菜
radish 萝卜
tarragon 狭叶青蒿
thyme 百里香
mushroom 蘑菇
artichoke 洋蓟
broccoli, brocoli 硬花甘蓝
Brussels sprouts 芽甘蓝
caper 刺山柑,老鼠瓜
cardoon 刺菜蓟
chervil 雪维菜,细叶芹
chick-pea 鹰嘴豆
chicory 苣荬菜
cress 水田芥
cumin, cummin 孜然芹,枯茗
dandelion 蒲公英
French bean 法国菜豆
gherkin 嫩黄瓜
horseradish 辣根
Jerusalem artichoke 洋姜,鬼子姜
kale 无头甘蓝
kohlrabi 甘蓝
laurel 月桂
lentil 兵豆
lettuce 莴苣
lupin 羽扇豆 (美作:lupine)
parsley 欧芹
parsnip 欧防风
pea 豌豆
rhubarb 大黄
salsify 婆罗门参
sorrel 掌叶大黄
truffle 块菌
turnip 芜菁
watercress 豆瓣菜
回答者: coverlady – 试用期 一级 11-5 20:21
banana(香蕉)
tomato(西红柿)
broccoli(花椰菜)
French fries(薯条)
orange(橙子)
strawberry(草莓)
pear(梨子)
apple(苹果)
carrot(胡萝卜)
参考资料:刚学过的
回答者: 8996116 – 试用期 一级 11-5 20:31
水果:
香蕉——banana
苹果——apple
橙子——orange
草莓——strawberry
梨——pear
桃子——peach
李子,梅子——plum
椰子——coconut
奇异果——actinidia berry
西瓜——watermelon
哈密瓜—— hami melon
荔枝——litchi fruit
龙眼——longan
甜瓜——melon
榴莲——durian
山竹——mangosteen
芒果——mango
番荔枝——Custard apple
菠萝——pineapple
葡萄——grape
大树菠萝——Jack fruit
人参果—— Ciku
红毛丹——rambutan
火龙果——Pitaya
柿子——persimmon
蔬菜:
番茄——tomato
马铃薯——potato
卷心菜——cabbage
椰菜花——Cauliflower
西兰花——broccoli
芦笋——asparagus
胡萝卜——carrot
萝卜——radish
西洋菜——Watercress
芹菜——celery
茄子——eggplant
南瓜——pumpkin
冬瓜——white gourd
大白菜——celery cabbage
菜心——flowering cabbage
莲藕——lotus root
韭菜——leek
豆角——kidney bean
通菜——Ipomoea aquatica
莴苣——Lettuce
竹笋——bamboo shoot
洋葱——onion
celery是什么意思
celery是“芹菜;西芹;西洋芹;旱芹”的意思。
(复数celeries)短语搭配:celerysalt香芹盐;celerypine芹松、芹叶枝松;celerycabbage大白菜;celeryseedoil芹菜籽油、芹菜子油。
例句:1.Withbothendschoppedoff,there’snotmuchleftofthisbunchofcelery.这把芹菜掐头去尾剩下不多了。
2.Sweattheceleryandonionswitholiveoilandseasoning.用橄榄油和调料慢煮芹菜和洋葱。
celery python 好用吗
为什么要使用celery
Celery是一个使用Python开发的分布式任务调度模块,因此对于大量使用Python构建的系统,可以说是无缝衔接,使用起来很方便。Celery专注于实时处理任务,同时也支持任务的定时调度。因此适合实时异步任务定时任务等调度场景。Celery需要依靠RabbitMQ等作为消息代理,同时也支持Redis甚至是Mysql,Mongo等,当然,官方默认推荐的是RabbitMQ。
broker的选择
虽然官方支持的broker有很多,包括RabbitMQ,Redis甚至是数据库,但是不推荐使用数据库,因为数据库需要不断访问磁盘,当你的任务量大了之后会造成很严重的性能问题,同时你的应用很可能也在使用同一个数据库,这样可能导致你的应用被拖垮。如果业务环境比较简单可以选择Redis,如果比较复杂选择RabbitMQ,因为RabbitMQ是官方推荐的,但是比Redis操作起来又相对复杂些。我的选择是broker用RabbitMQ,backend用Redis
希望能帮到你!
请问celery是可数名词还是不可数名词
不可数名词
一棵芹菜 a head of celery
一根芹菜 a stick of celery
–手工劳动,满意请采纳,谢谢–
关于蔬菜水果的英文单词
1、waxberry杨梅
英:[’wæksbərɪ]美:[’wæksˌberɪ]
n.杨梅; 杨梅果;
例句:Ultrasonic-assisted Extraction of Flavonoids from Waxberry Fruit
超声波辅助提取杨梅果实中黄酮类化合物的工艺研究
复数:waxberries
2、cherry 樱桃
英 : [ˈtʃeri]美 : [ˈtʃɛri]
n.樱桃; 樱桃树; 樱桃色; 处女膜
例句:
Light filtered into my kitchen through the soft, green shade of the cherry tree.
光线透过樱桃树柔和的绿阴隐约照进我的厨房。
复数:cherries
3、pineapple 凤梨
英 : [ˈpaɪnæpl]美 : [ˈpaɪnˌæpəl]
n.菠萝; 凤梨; 〈俚〉手榴弹
例句:
It’s a drink made by steeping pineapple rind in water.
这是用菠萝皮泡在水里做的饮料。
复数:pineapples
4、betelnut 槟榔
英:[’bi:tlˌnʌt]美:[’bi:tlˌnʌt]
n.槟榔;
例句:
You can tell the difference between a fresh and a stale betelnut.
可以看出新鲜槟榔和过期槟榔的不同。
5、chestnut 栗子
英:[ˈtʃesnʌt]美:[ˈtʃɛsˌnʌt, -nət]
n.栗子; 栗色; 栗树; 栗色马;
adj.栗色的;
例句:
The fruit is rather like a sweet chestnut
这种果实颇似甜栗子。
复数:chestnuts
6、coconut 椰子
7、ponkan 碰柑
8、mandarin orange 橘
9、sugar-cane 甘蔗
10、muskmelon 香瓜
11、shaddock 文旦
12、juice peach 水蜜桃
13、water caltrop 菱角
14、plum 李子
15、honey-dew melon 哈密瓜
16、loquat 枇杷
17、olive 橄榄
18、rambutan 红毛丹
19、durian 榴梿
20、grapefruit 葡萄柚
21、longan 龙眼
22、wax-apple 莲雾
23、guava 番石榴
24、watermelon 西瓜
25、grape 葡萄
26、柚子 pomelo
27、山楂 haw / hawthorn
芹菜英语
芹菜英语是celery。
读音:[ˈseləri]
词性:通常在句中作名词,作为主语或宾语。
固定搭配:Stalk of the Celery Monster 芹菜怪物的茎;celery salt 香芹盐 ; 芹菜盐 ; 芹子盐 ; 芹菜籽盐。
例句
1、Which vegetable do you like best, cucumber, carrot or celery?
你最喜欢黄瓜、胡萝卜还是芹菜?
2、There was nothing much I wanted to eat: the remains of a bunch of celery, a blue-tinged heel of bread, a lemon going soft.
我没有什么想吃的:剩下的一束芹菜,发霉的面包,一个变软的柠檬。
3、Celery and carrot sticks with low-fat ranch dressing for dipping.
低脂肪沥干水的芹菜,胡萝卜。