多线程
在单线程执行任务的时候,必须按照任务的安排逐一执行并且是按顺序执行,而当我们的任务并没有相互依赖前后关系时,使用多线程会大大提高执行效率,Python提供了threading模块,我们可以使用threading模块中的Thread函数进行多线程方式的执行任务
# -*- 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("接口调用已经返回结果,本次同步结束") def syc_jsliang(): """syc_jsliang""" print("Start synchronizing %s %s" % ("jsliang", ctime())) parameter = {"userId":"1223","userName":"18515934978","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_lucian(): """syc_lucian""" print("Start synchronizing %s %s" % ("lucian", ctime())) parameter = {"userId":"1295","userName":"13911154792","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_jeanne(): """syc_jeanne""" print("Start synchronizing %s %s" % ("jeanne", ctime())) parameter = {"userId":"1244","userName":"13810391489","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) jsliang_thread = threading.Thread(target=syc_jsliang) syc_email_threads.append(jsliang_thread) lucian_thread = threading.Thread(target=syc_lucian) syc_email_threads.append(lucian_thread) jeanne_thread = threading.Thread(target=syc_jeanne) syc_email_threads.append(jeanne_thread) if __name__ == '__main__': for threademail in syc_email_threads: threademail.start() # 启动线程活动 for threademail in syc_email_threads: threademail.join() # 等待线程终止
执行结果
Python 3.7.1 | packaged by conda-forge | (default, Mar 13 2019, 13:32:59) [MSC v.1900 64 bit (AMD64)] Type "copyright", "credits" or "license" for more information. IPython 7.3.0 -- An enhanced Interactive Python. In [1]: runfile('C:/Users/Administrator/Desktop/multithreadinginvoke_syc_email.py', wdir='C:/Users/Administrator/Desktop') Start synchronizing owen Wed Mar 20 12:23:23 2019 Start synchronizing grace Wed Mar 20 12:23:23 2019 Start synchronizing jsliang Wed Mar 20 12:23:23 2019 Start synchronizing lucian Wed Mar 20 12:23:23 2019 Start synchronizing jeanne Wed Mar 20 12:23:23 2019 Start synchronizing leonard Wed Mar 20 12:23:23 2019 Start synchronizing abby Wed Mar 20 12:23:23 2019 Start synchronizing tilly Wed Mar 20 12:23:23 2019 Start synchronizing chexinni Wed Mar 20 12:23:23 2019 Start synchronizing kimi Wed Mar 20 12:23:23 2019 Start synchronizing wangjun Wed Mar 20 12:23:23 2019 Start synchronizing david Wed Mar 20 12:23:23 2019 Start synchronizing steven Wed Mar 20 12:23:23 2019 Start synchronizing Amy Wed Mar 20 12:23:23 2019 Start synchronizing wendy Wed Mar 20 12:23:23 2019 Start synchronizing Kayla Wed Mar 20 12:23:23 2019 Start synchronizing wangjing Wed Mar 20 12:23:23 2019 Start synchronizing cindy Wed Mar 20 12:23:23 2019 Start synchronizing davidpan Wed Mar 20 12:23:23 2019 Start synchronizing fabiana Wed Mar 20 12:23:23 2019 Start synchronizing alice Wed Mar 20 12:23:23 2019 Start synchronizing james Wed Mar 20 12:23:23 2019 Start synchronizing helen Wed Mar 20 12:23:23 2019 Start synchronizing yulia Wed Mar 20 12:23:23 2019 Start synchronizing richard Wed Mar 20 12:23:23 2019 Start synchronizing mila Wed Mar 20 12:23:23 2019 Start synchronizing nina Wed Mar 20 12:23:23 2019 Start synchronizing julie Wed Mar 20 12:23:23 2019 Start synchronizing chenshiyuan Wed Mar 20 12:23:23 2019 Start synchronizing pengshuai Wed Mar 20 12:23:23 2019 Start synchronizing yolanda Wed Mar 20 12:23:23 2019 Start synchronizing francis Wed Mar 20 12:23:23 2019 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束 { "code": 1, "data": 0, "msg": "成功" } 接口调用已经返回结果,本次同步结束
# -*- 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())