一、GIL锁
1.gilglobalinterpreterlock(cpython)
2.python中一个线程对应于c语言中的一个线程
3.gil使得同一个时刻只有一个线程在一个cpu上执行字节码,无法将多个线程映射到多个cpu上执行
4.gil会根据执行的字节码行数以及时间片释放gil,gil在遇到io的操作时候主动释放
二、多线程
#2.通过集成Thread来实现多线程classGetDetailHtml(threading.Thread):def__init__(self,name):super().__init__(name=name)defrun(self):print("getdetailhtmlstarted")time.sleep(2)print("getdetailhtmlend")classGetDetailUrl(threading.Thread):def__init__(self,name):super().__init__(name=name)defrun(self):print("getdetailurlstarted")time.sleep(4)print("getdetailurlend")if__name__=="__main__":thread1=GetDetailHtml("get_detail_html")thread2=GetDetailUrl("get_detail_url")start_time=time.time()thread1.start()thread2.start()thread1.join()thread2.join()#当主线程退出的时候,子线程kill掉print("lasttime:{}".format(time.time()-start_time))
三、线程间的通讯Queue
#通过queue的方式进行线程间同步fromqueueimportQueueimporttimeimportthreadingdefget_detail_html(queue):#爬取文章详情页whileTrue:url=queue.get()#forurlindetail_url_list:print("getdetailhtmlstarted")time.sleep(2)print("getdetailhtmlend")defget_detail_url(queue):#爬取文章列表页whileTrue:print("getdetailurlstarted")time.sleep(4)foriinrange(20):queue.put("