青菜

首页 » 常识 » 诊断 » Python多线程
TUhjnbcbe - 2021/3/18 0:09:00
北京好的治疗白癜风总共多少钱 https://m-mip.39.net/baidianfeng/mipso_4525518.html

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

1
查看完整版本: Python多线程