Python提供了_thread和threading两个模块来支持多线程,但_thread提供低级别的、原始的县城支持,以及一个简单的锁,通常情况下我们使用后者,来进行多线程编程
创建多线程
使用threading模块创建线程有两种方式,一种是调用Thread类的构造器来创建,另一种是继承Thread类创建线程类
使用Thread类的构造器创建线程
Thread类有如下构造器,直接调用它即可创建线程
__init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None)
group:指定该线程所属的线程组
target:指定该线程要调度的目标方法
args:指定一个元组,以位置参数的形式为target指定的函数传入参数
kwargs:指定一个字典,以关键字参数的形式为target指定的函数传入参数
daemon:指定所构建的线程是否是后台线程
使用构造器创建线程步骤
调用Thread类的构造器创建线程对象,其中target参数指定的函数作为线程执行体
调用线程对象的start()方法启动该线程
import threading # 定义一个普通的action函数,该函数准备作为线程执行体 def action(max): for i in range(max): # 调用threading模块current_thread()函数获取当前线程 # 线程对象的getName()方法获取当前线程的名字 print(threading.current_thread().getName() + " " + str(i)) # 下面是主程序(也就是主线程的执行体) for i in range(100): # 调用threading模块current_thread()函数获取当前线程 print(threading.current_thread().getName() + " " + str(i)) if i == 20: # 创建并启动第一个线程 t1 =threading.Thread(target=action,args=(100,)) t1.start() # 创建并启动第二个线程 t2 =threading.Thread(target=action,args=(100,)) t2.start() print('主线程执行完成!')
args=(100,)可以看到这个参数,他是个元组形式的参数,按位置逐一传给函数执行体,在这个例子中就是action(MAX)函数
继承Thread类创建线程类
通过继承Thread类来创建线程步骤
定义Thread类的子类,并重写该类的run()函数,run()函数是线程执行体
创建Thread子类的实例,也就是创建线程对象
调用线程对象的start()方法来启动线程
————————————————
import threading # 通过继承threading.Thread类来创建线程类 class FkThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.i = 0 # 重写run()方法作为线程执行体 def run(self): while self.i < 100: # 调用threading模块current_thread()函数获取当前线程 # 线程对象的getName()方法获取当前线程的名字 print(threading.current_thread().getName() + " " + str(self.i)) self.i += 1 # 下面是主程序(也就是主线程的执行体) for i in range(100): # 调用threading模块current_thread()函数获取当前线程 print(threading.current_thread().getName() + " " + str(i)) if i == 20: # 创建并启动第一个线程 ft1 = FkThread() ft1.start() # 创建并启动第二个线程 ft2 = FkThread() ft2.start() print('主线程执行完成!')
多线程调用接口
# -*- coding: utf-8 -*- import threading import requests from time import ctime import json def syc_owen(): """syc_owen""" print("Start synchronizing %s %s" % ("owen", ctime())) parameter = {"userId":"1263","userName":"13810078954","enterpriseId":"10330","flag":"sended"} request_own = requests.put("https://xxxxxx.leadscloud.com/mail/receiveSendedAndRubbishMail", data=parameter) data = request_own.json() print(json.dumps(data, indent=4, sort_keys=True, ensure_ascii=False) ) print("接口调用已经返回结果,本次同步结束") def syc_grace(): """syc_grace""" print("Start synchronizing %s %s" % ("grace", ctime())) parameter = {"userId":"1294","userName":"13810327625","enterpriseId":"10330","flag":"sended"} request_own = requests.put("https://xxxxxx.leadscloud.com/mail/receiveSendedAndRubbishMail", data=parameter) data = request_own.json() print(json.dumps(data, indent=4, sort_keys=True, ensure_ascii=False) ) print("接口调用已经返回结果,本次同步结束") syc_email_threads = [] # 定义线程列表,然后逐一将线程放进列表最后加载线程列表执行 owen_thread = threading.Thread(target=syc_owen) syc_email_threads.append(owen_thread) grace_thread = threading.Thread(target=syc_grace) syc_email_threads.append(grace_thread) if __name__ == '__main__': for threademail in syc_email_threads: threademail.start() # 启动线程活动 for threademail in syc_email_threads: threademail.join() # 等待线程终止
多线程启动浏览器实例
单线程代码
# -*- coding: utf-8 -*- """ Created on Wed Apr 24 11:45:55 2019 @author: davieyang """ from selenium import webdriver # 引入webdriver from time import sleep # 从time模块引入sleep from time import ctime # 从time模块引入ctime def start_chrome(): # 定义启动谷歌浏览器的方法 print("starting chrome browser now! %s" % ctime()) # 控制台打印当前时间 chrome_driver = webdriver.Chrome() chrome_driver.get("http://www.baidu.com") #打开百度主页 sleep(2) chrome_driver.quit() def start_firefox(): # 定义启动火狐浏览器的方法 print("starting firefox browser now! %s" % ctime()) # 控制台打印当前时间 fire_driver = webdriver.Firefox() fire_driver.get("http://www.baidu.com") #打开百度主页 sleep(3) fire_driver.quit() def start_ie(): # 定义启动IE浏览器的方法 print("starting ie browser now! %s" %ctime()) # 控制台打印当前时间 ie_driver = webdriver.Ie() ie_driver.get("http://www.baidu.com") #打开百度主页 sleep(5) ie_driver.quit() if __name__ == '__main__': start_chrome() start_firefox() start_ie() print(u"全部结束 %s" %ctime())
多线程代码
# -*- coding: utf-8 -*- """ Created on Wed Apr 24 19:23:25 2019 @author: davieyang """ from selenium import webdriver from time import sleep from time import ctime import threading def start_chrome(): # 定义启动谷歌浏览器的方法 print("starting chrome browser now! %s" % ctime()) chrome_driver = webdriver.Chrome() chrome_driver.get("http://www.baidu.com") sleep(2) chrome_driver.quit() def start_firefox(): # 定义启动火狐浏览器的方法 print("starting firefox browser now! %s" % ctime()) fire_driver = webdriver.Firefox() fire_driver.get("http://www.baidu.com") sleep(3) fire_driver.quit() def start_ie(): # 定义启动IE浏览器的方法 print("starting ie browser now! %s" % ctime()) ie_driver = webdriver.Ie() ie_driver.get("http://www.baidu.com") sleep(5) ie_driver.quit() threading_list = [] #创建一个空列表用于存储线程 # 定义一个执行start_chrome()方法的线程 chrome_thread = threading.Thread(target=start_chrome) threading_list.append(chrome_thread) # 将线程放到列表中 # 定义一个执行start_firefox()方法的线程 firefox_thread = threading.Thread(target=start_firefox) threading_list.append(firefox_thread) # 将线程放到列表中 ''' # 定义一个执行start_chrome()方法的线程 ie_thread = threading.Thread(target=start_ie) threading_list.append(ie_thread) # 将线程放到列表中 ''' if __name__ == '__main__': for start_thread in threading_list: start_thread.start() for start_thread in threading_list: start_thread.join() print(u"全部结束 %s" % ctime())
————————————————
版权声明:本文为CSDN博主「Davieyang.D.Y」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dawei_yang000000/article/details/105609689