3.第一次搞实时日志系统,没有经验
虽然这些技术以前略看过,但用起来是另一回事,特此记录踩坑记录,相关教程可以参考:
https://mp.weixin.qq.com/s/hqaPrPS7w3D-9SeegQAB2Q
https://mp.weixin.qq.com/s/r5SpyTjRl0jJeAuYE4Q_-Q
该教程使用Linux,而本人脑残使用了windows,所以除了很多问题,也刚好学习了很多,所幸最后都搞定了。
问题1:部署了channels收不到消息?
答案:多半是redis没有配置好
问题2:部署了celery,但是报错
Celery ValueError: not enough values to unpack (expected 3, got 0)
?
答案:celery版本太高,你一定是安装了celery4.x。建议退回到celery3.1.25
问题3:celery版本是3,但是报错:
redis celery AttributeError: 'str' object has no attribute 'items'
?
答案:降级了celery,也要降级redis,降redis降级到2.10.6
问题4:日志系统终于好了,但是前端关闭socket后再打开就收不到信息了?
答案:其实看celery日志就明白,channles_name没变,还是上一次的记录。是因为你使用了--pool=solo参数启动selery导致的,去掉该参数,使用 celery -A webset worker -l info启动,此时如果报错,大概率是因为上述问题2、3
问题5:celery启动了,redis也启动了,但是calery收不到消息?
答案:多半是你redis配置没弄好,查看webset/celery.py文件,查看redis配置,此时需注意celery3.x和celery4.x的配置有点区别
celery4.x:
app.autodiscover_tasks()
app.config_from_object('django.conf:settings',namespace='CELERY')
celery3.x:
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda :settings.INSTALLED_APPS)
最近手头有一个项目需要交付,作为web项目,并发问题是不可避免的。对于
Django
后端,常用的并发实现方案就是
Celery
,虽然网上已经有不少实施例,但是实际开发过程中遇到一些问题。比如长连接异步执行结果如何反馈?
Celery
执行池如何选择?win下只支持多协程并发,如何解决Eventloop异步循环问题?这篇文章就介绍一个博主亲测成功的实施例架构。
Channel
s是
Django
团队研发的一个给
Django
提供websocket支持的框架,使用它我们可以轻松开发需要长链接的
实时
通讯应用。本文在
Django
实战
:
channel
s + w...
celerty自定义队列demo_queue,然后使用命令以下命令启动没问题
celery
-A tasks.tasks worker -P eventlet -Q queue_common -l debug
使用下面方式启动收不到任务
app.worker_main(argv=[
'worker',
'--loglevel=info',
'--pool=threads',
'--concurrency=100',
'-Q d
为什么要使用异步
首先,我们要知道计算机的处理分为两种,CPU处理和IO处理。一般来说,处理一个任务,需要CPU和IO相互协调。
CPU的处理速度远远快于IO的,所以当一个任务的CPU处理部分完成后,还需要等待IO的完成。这个等待的过程也就是进程阻塞。进程占着CPU空等没活干。
而异步就是把进程在等待过程中占用的CPU释放掉,让它去处理其他的东西。那正在处理的IO怎么办?
系统
提供了一种通知机制,使...
Django
Channel
s Websocket: RuntimeWarning: coroutine 'Connection.disconnect' was never awaited
django
+
django
-
celery
+
celery
的整合本篇文章主要是由于计划使用
django
写一个计划任务出来,可以定时的轮换值班人员名称或者定时执行脚本等功能,百度无数
坑
之后,终于可以凑合把这套东西部署上。本人英文不好,英文好或者希望深入学习或使用的人,建议去参考官方文档,而且本篇的记录不一定正确,仅仅实现crontab 的功能而已。
希望深入学习的人可以参考http://docs.jin
https://segmentfault.com/a/11900000080220501. 环境python==3.6
djang==1.11.6 # 1.8, 1.9, 1.10应该都没问题
celery
-with-redis==3.0 # 需要用到redis作为中间人服务(Broker)
celery
==3.1.25 # 安装上面的会自动安装
kombu==3.0.37
billia...