在一个任务未完成时,就可以执行其他多个任务,彼此不受影响(在看第一部下载好的电影时,其他电影继续保持下载状态,彼此之间不受影响),叫异步
同步就是一个任务结束才能启动下一个(类比你看完一部电影,才能去看下一部电影)
异步执行任务会比同步更加节省时间,因为它能减少不必要的等待。如果你需要对时间做优化,异步是一个很值得考虑的方案。
多协程异步:一个任务在执行过程中,如果遇到等待,就先去执行其他的任务,当等待结束,再回来继续之前的那个任务。在计算机的世界,这种任务来回切换得非常快速,看上去就像多个任务在被同时执行一样。
每个进程都有自己的地址空间、内存、数据栈
线程要运行在进程中,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉等于整个进程死掉。例如进程看成一个高速公路,线程是高速路上的汽车。
# 多线程执行测试用例
from threading import Thread
from selenium import webdriver
from time import ctime, sleep
# 测试用例
def test_baidu(browser, search):
print('start:%s' % ctime())
print('browser:%s ,' % browser)
if browser == "chrome":
driver = webdriver.Chrome()
elif browser == "ie":
driver = webdriver.Ie()
elif browser == 'ff':
driver=webdriver.Firefox()
else:
print('browser参数有误,只能为ff、chrome')
driver.get('http://www.baidu.com')
driver.find_element_by_id("kw").send_keys(search)
driver.find_element_by_id('su').click()
sleep(2)
driver.quit()
if __name__ == "__main__":
# 启动参数(指浏览器与百度搜索内容)
lists = {'chrome': 'threading', 'ie': 'python','ff':'firefox'}
threads = []
files = range(len(lists))
# 创建线程
for browser, search in lists.items():
t = Thread(target=test_baidu, args=(browser, search))
threads.append(t)
# 启动线程
for t in files:
threads[t].start()
for t in files:
threads[t].join() # join()函数必须放在线程启动之后
print('end:%s' % ctime())
版权声明:本文为weixin_42550871原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。