项目需要模拟登录之后进行一些操作,所以使用了python+selenium,为了并发高一些,用了celery来调度。遇到的几个小坑,简单记录一下。
1.并发时的浏览器冲突
由于系统安装了一个版本的chrome,同一个时间只能处理一个账号,无法并发。
解决方法:使用docker部署,不同docker里面各自启动chrome,没有冲突
2.任务重复执行
发现多线程出现了任务重复的情况,但业务不允许。
解决方法:使用了celeryOnce,里面放了不同的参数
3.一个任务被多个消费者拿到
解决方法(同时用):
1)broker从redis换到了rabbitmq
2)celcery的acks_late设置为false,但一定要处理好,否则就会丢失。
4.重试机制的选择
1)直接重试:retry
2)放到队列最后:重新send一个task