简单聊一聊python3中多线程的使用方法

threading库

threading库是python3内置的线程库,可以使用threading库创建多个线程

创建多线程的两种方法

  • 继承Thread类(推荐使用)

直接看代码,注意看注释讲解

	import re, requests, threading

	class MyThread(threading.Thread):
		"""
		定义一个线程
		用于获取一个页面的文章内容
		"""
		def __init__(self, per_link):
		# 这里需要调用父类的构造函数
		# 因为Thread类在定义线程的时候就是通过构造函数使用的run函数(个人猜测...)
    		super().__init__()
   		self.link = per_link
    		self.content = ''  # 空字符串
   			self.contents = []
   			
		def run(self):
		# 修改run函数的内容
		# 改为要执行的线程的程序代码	
    		res = requests.get(self.link)
    		res.encoding = 'gbk'
    		self.contents = re.findall('<p>(.*?)</p>', res.text, re.S)
    		# print(self.contents[0])
    		self.content = self.contents[0].replace('<br />', '')
    	
    	# 通过类继承的方法定义多线程时有个有点就是可以添加函数用作其他功能
    	# 例如,添加一个函数用于返回线程的执行结果返回值
		def get_result(self):
    		print(self.content)
    		return self.content
    		
    class MultiCrawler():
 		"""
		接收页面链接列表,并依次访问、调用线程
		"""
		def __init__(self, links):
    		self.link_list = links
    		self.content_list = []

		def multi_crawer(self):
    		for i in self.link_list:
    			# 实例化一个线程
        		t = MyThread(i)
        		#启动线程
        		t.start()
				# 等待这个线程结束
        		t.join()
        		self.content_list.append(t.get_result())
    
    		return self.content_list

为什么使用类继承的方法时一定要调用父类的__init__()
在这里插入图片描述

  • 实例化Thread类

这个方法简单讲一下,因为个人觉得使用起来不够灵活

	def thread1():
		print('thread 1 is running...')

	def thread2():
		print('thread 2 is running...')

	t1 = threading.Thread(target=thread1, args=())
	t1.start()
	t1.join()
	t2 = threading.Thread(target=thread2, args=())
	t2.start()
	t2.join()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值