在一个任务未完成时,就可以执行其他多个任务,彼此不受影响(在看第一部下载好的电影时,其他电影继续保持下载状态,彼此之间不受影响),叫异步 同步就是一个任务结束才能启动下一个(类比你看完一部电影,才能去看下一部电影) 异步执行任务会比同步更加节省时间,因为它能减少不必要的等待。如果你需要对时间做优化,异步是一个很值得考虑的方案。
多协程异步:一个任务在执行过程中,如果遇到等待,就先去执行其他的任务,当等待结束,再回来继续之前的那个任务。在计算机的世界,这种任务来回切换得非常快速,看上去就像多个任务在被同时执行一样。
每个进程都有自己的地址空间、内存、数据栈 线程要运行在进程中,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉等于整个进程死掉。例如进程看成一个高速公路,线程是高速路上的汽车。
# 多线程执行测试用例 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())