Python采坑备忘|Python采坑备忘 2018-12-22
这周帮同事做一个基于Selenium的Python小爬虫,在CentOS下用webdriver.Chrome的--headless模式,给网页发送键盘事件消息。网上这类的资料很多,实现起来并不难,但在执行时,还是碰到了两个技术坑,需要记录一下。
第一个是:Queue.queue和threading.Lock()的配合使用问题,这个用法其实是多此一举,因为本身Queue.queue线程安全的,不需要加锁,但抄了错误代码,既然用了就用吧,顺便练练线程lock,没想到代码写的不好,主线程入数据时简单加锁,代码如下:
queueLock.acquire()可是Queue.queue的声明是:
workQueue.put(data)
queueLock.release()
workQueue = Queue.Queue(10)这样在工作线程处理较慢时,队列10个数量被加满了,但queueLock.acquire()执行完就进入锁区,导致工作线程无法再锁获取数据进行消费。最后加了队列长度判断和sleep解决,代码如下:
while True:第二个是webdriver的路径问题,现象是shell下直接执行没问题,但用crontab定时任务就不行了,查了试了N多方法,最后确认是chromedriver的路径问题,修改代码解决。
if workQueue.qsize() < 8 :
queueLock.acquire()
workQueue.put(data)
queueLock.release()
break
else:
sleep(1)
driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver",chrome_options=chrome_options)【Python采坑备忘|Python采坑备忘 2018-12-22】记录并备忘之。
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)
- Python|Python 9.20