Python采坑备忘 2018-12-22

这周帮同事做一个基于Selenium的Python小爬虫,在CentOS下用webdriver.Chrome的--headless模式,给网页发送键盘事件消息。网上这类的资料很多,实现起来并不难,但在执行时,还是碰到了两个技术坑,需要记录一下。

第一个是:Queue.queue和threading.Lock()的配合使用问题,这个用法其实是多此一举,因为本身Queue.queue线程安全的,不需要加锁,但抄了错误代码,既然用了就用吧,顺便练练线程lock,没想到代码写的不好,主线程入数据时简单加锁,代码如下:

queueLock.acquire()

workQueue.put(data)

queueLock.release()

可是Queue.queue的声明是:

workQueue = Queue.Queue(10)

这样在工作线程处理较慢时,队列10个数量被加满了,但queueLock.acquire()执行完就进入锁区,导致工作线程无法再锁获取数据进行消费。最后加了队列长度判断和sleep解决,代码如下:

while True:

                if workQueue.qsize() < 8 :

                    queueLock.acquire()

                    workQueue.put(data)

                    queueLock.release()

                    break

                else:

                    sleep(1)

第二个是webdriver的路径问题,现象是shell下直接执行没问题,但用crontab定时任务就不行了,查了试了N多方法,最后确认是chromedriver的路径问题,修改代码解决。

driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver",chrome_options=chrome_options)

记录并备忘之。

你可能感兴趣的:(Python采坑备忘 2018-12-22)