您所在的位置:一氧化碳中毒 >> 病种百科>> >> Python多线程

Python多线程

文章来源:一氧化碳中毒   发布时间:2021-10-2 9:41:06   点击数:
  

一、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("

转载请注明:http://www.lwblm.com/bzbk/12494.html