引言
最近在学习Python爬虫,发现Scrapy框架是解决了Python多线程问题,不用自己去理解多线程,只需遵循它的框架来写就行了。但是在我用requests爬虫的时候,就要自己编写多线程的逻辑了,还是需要去查资料好好理解一下的。
个人理解
1. python的多线程常用的有两种:
(1) 正常的启动多个thread,每个线程跑一个任务,进程间用队列queue通信。具体实现如下:
def put_to_queue(arg1,arg2):
......
# queue有两种存数据的方法,一种是put(),这种方法在队列满的时,会一直等待,直到队列有
# 空位置可以放数据。另一种是put_nowait(),这种方法会在队列满时,抛出异常。同样取数据
# 也有get()和get_nowait(),get_nowait()会在队列空时,抛出异常。
queue.put_nowait(data)
def get_from_queue(arg1):
......
while True:
try:
data = queue.get_nowait() # 循环取出数据,如果队列为空,则抛出异常
......
queue.task_done() # 操作完成,标记该数据已从队列取出
except:
print('queue is empty wait for a while')
if __name__ == '__main__':
......
put_thread = Thread(target=put_to_queue,args=(ar