celery

基础

  • celery报错的时候,worker无法报错,但是在外面用get()的时候会报错

官网

terminal1: cd test && celery -A tasks worker --loglevel=info --concurrency=1
terminal2: cd test && python3 test_tasks.py
  • 只能支持可序列化的参数,不支持自定义class

  • 测试代码 测试脚本

  • 不需要启动多个celery, 因为celery本身就是多线程的. 并且里面的变量是共享的

  • 如果启动了多个celery, 一个请求过去只有一个celery的里面一个线程会收到任务

  • 默认启动了4个worker, 所以如果是4个以内的请求,耗时为一倍, 5个到8个耗时为2倍

  • celery使用rabbitmq也会遇到一样的问题,是round-robin的. 需要配置worker_prefetch_multiplier

  • 内存分析

    • 多线程对于大变量内存影响不大.所以celery应该是多个concurrency共享内存变量的

程序

线程

大内存变量

VIRT

RES

备注

python

1

0

17884

9992

大型变量用list(range(100000))

python

1

1

21836(+3952)

14012(+4020)

和没有变量相比

python

1

2

celery

1

0

50428(+32544)

28988(+18996)

和python_1_0相比

celery

2

0

52896(+2468)

37280(+8292)

和celery_1_0相比

celery

4

0

52908(+2480)

37108(+8210)

和celery_1_0相比

celery

8

0

52924(+2496)

37232(+8244)

和celery_1_0相比

celery

16

1

53220(+2792)

37212(+8824)

和celery_1_0相比

celery

1

1

57100(+6672)

41212(+12224)

和celery_1_0相比

celery

1

2

61172(+10744)

45084(+16096)

和celery_1_0相比

celery

4

1

52904

37248

和celery_1_0相比

celery

4

4

69228

53024

和celery_1_0相比

起步

Choose a broker

不管你怎么设置,只要broker都是amqp://guest@localhost//, 那么他们在rabbitmq的queue都是celery。但是在celery启动的时候,会额外产生两个queue

Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name    messages
celery@manjaro.celery.pidbox    0
celery  0
celeryev.76bb7ea5-4b5e-4c4b-9c8f-8179984fa8b6   0

Config

  • logging

    • celery会关闭root的logger, 所以不能设置