AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

Python 并發(fā)編程的 12 個實用技巧

來源: 責(zé)編: 時間:2024-05-22 17:13:43 154觀看
導(dǎo)讀今天我們要一起探索的是Python中的并發(fā)編程,這可是提升程序速度的魔法鑰匙哦!別擔(dān)心,即使你是新手,我也會讓你一步步成為并發(fā)小能手。1. 遇見threading,多線程初體驗想象一下,你在咖啡館同時處理郵件、聊天和寫代碼,這就是多

今天我們要一起探索的是Python中的并發(fā)編程,這可是提升程序速度的魔法鑰匙哦!別擔(dān)心,即使你是新手,我也會讓你一步步成為并發(fā)小能手。sKn28資訊網(wǎng)——每日最新資訊28at.com

sKn28資訊網(wǎng)——每日最新資訊28at.com

1. 遇見threading,多線程初體驗

想象一下,你在咖啡館同時處理郵件、聊天和寫代碼,這就是多線程的日常。在Python里,threading模塊是你的得力助手。sKn28資訊網(wǎng)——每日最新資訊28at.com

import threadingimport timedef say_hello(name):    print(f"Hello, {name}!")    time.sleep(2)  # 模擬耗時操作# 創(chuàng)建線程thread1 = threading.Thread(target=say_hello, args=("World",))thread2 = threading.Thread(target=say_hello, args=("Python",))# 啟動線程thread1.start()thread2.start()# 等待所有線程完成thread1.join()thread2.join()print("All tasks done.")

這段代碼創(chuàng)建了兩個線程,分別打印不同的問候語,然后等待它們完成。記住join(),它是等待線程的守護(hù)者。sKn28資訊網(wǎng)——每日最新資訊28at.com

2. 并發(fā)陷阱:全局解釋器鎖GIL

哎呀,提到多線程,不得不提Python的“獨特”設(shè)計——GIL。它就像個小警察,讓CPU核心輪流執(zhí)行Python字節(jié)碼,這意味著多線程在CPU密集型任務(wù)中并不總是更快。別灰心,對于I/O密集型任務(wù),多線程還是很香的!sKn28資訊網(wǎng)——每日最新資訊28at.com

3. multiprocessing:繞過GIL,火力全開

如果想真正利用多核CPU,multiprocessing模塊是你的不二之選。它為每個進(jìn)程創(chuàng)建獨立的Python解釋器,繞過GIL。sKn28資訊網(wǎng)——每日最新資訊28at.com

from multiprocessing import Processdef worker(num):    print(f'Worker: {num}')    time.sleep(2)if __name__ == '__main__':    processes = []    for i in range(4):        p = Process(target=worker, args=(i,))        processes.append(p)        p.start()

每個Process都是一個獨立的小世界,它們并行運行,不受GIL限制。sKn28資訊網(wǎng)——每日最新資訊28at.com

4. 并行不是萬能藥

并發(fā)或并行雖然快,但也會帶來復(fù)雜性,比如數(shù)據(jù)同步問題。記得使用鎖(Lock)來避免資源沖突,就像在廚房里只有一個微波爐,大家輪流用。sKn28資訊網(wǎng)——每日最新資訊28at.com

from threading import Locklock = Lock()def safe_print(number):    with lock:        print(f'Safe print: {number}')safe_print(1)safe_print(2)

使用with語句自動管理鎖,安全又方便。sKn28資訊網(wǎng)——每日最新資訊28at.com

5. 隊列的智慧:queue.Queue

想象一個工廠的流水線,隊列(Queue)就是那個協(xié)調(diào)者。在多線程/進(jìn)程間傳遞數(shù)據(jù),非它莫屬。sKn28資訊網(wǎng)——每日最新資訊28at.com

from queue import Queuefrom threading import Threaddef producer(queue):    queue.put('Product')def consumer(queue):    print(queue.get())q = Queue()producer_thread = Thread(target=producer, args=(q,))consumer_thread = Thread(target=consumer, args=(q,))producer_thread.start()consumer_thread.start()producer_thread.join()consumer_thread.join()

隊列保證了數(shù)據(jù)的安全傳遞,避免了混亂。sKn28資訊網(wǎng)——每日最新資訊28at.com

6. 美妙的異步:asyncio

等不及了?asyncio帶你進(jìn)入異步編程的世界,用async/await關(guān)鍵字,就像給你的代碼加了翅膀。sKn28資訊網(wǎng)——每日最新資訊28at.com

import asyncioasync def hello(i):    print(f'Hello {i}')    await asyncio.sleep(1)  # 異步等待async def main():    tasks = [hello(i) for i in range(3)]    await asyncio.gather(*tasks)# Python 3.7+asyncio.run(main())

異步等待,讓程序在等待時去做其他事,效率杠杠的。sKn28資訊網(wǎng)——每日最新資訊28at.com

7. 異步編程的誤區(qū):不是所有操作都能異步

雖然asyncio很強(qiáng)大,但并非所有函數(shù)都可以異步化,比如那些直接操作硬件的低級API。選擇合適的方法,別硬塞。sKn28資訊網(wǎng)——每日最新資訊28at.com

8. concurrent.futures:未來的便捷通道

想要簡單地并發(fā)執(zhí)行任務(wù),不論同步還是異步,concurrent.futures是你的良師益友。sKn28資訊網(wǎng)——每日最新資訊28at.com

from concurrent.futures import ThreadPoolExecutordef worker(n):    return n * nwith ThreadPoolExecutor() as executor:    results = executor.map(worker, range(5))    print(list(results))  # 輸出平方數(shù)

用ThreadPoolExecutor輕松管理線程池,執(zhí)行任務(wù)就像點菜一樣簡單。sKn28資訊網(wǎng)——每日最新資訊28at.com

9. 錯誤處理的藝術(shù):優(yōu)雅捕獲異常

并發(fā)中錯誤處理很重要,使用try-except來保護(hù)你的代碼,確保一個任務(wù)的失敗不會影響到整個程序。sKn28資訊網(wǎng)——每日最新資訊28at.com

try:    # 可能會出錯的并發(fā)代碼except Exception as e:    print(f'Caught an exception: {e}')

保持冷靜,優(yōu)雅處理,你的程序更健壯。sKn28資訊網(wǎng)——每日最新資訊28at.com

10. 資源管理:上下文管理器與with

with語句不僅僅是為了代碼簡潔,它還能確保資源(如文件、鎖)的正確釋放,避免并發(fā)中的資源泄露。sKn28資訊網(wǎng)——每日最新資訊28at.com

with Lock():    # 在這里安全地操作共享資源

自動的開始與結(jié)束,像一位細(xì)心的管家。sKn28資訊網(wǎng)——每日最新資訊28at.com

11. 性能監(jiān)控:看穿并發(fā)的幕后

使用timeit, cProfile等工具來監(jiān)控你的并發(fā)程序,了解哪些部分慢如蝸牛,哪些是速度惡魔,優(yōu)化從了解開始。sKn28資訊網(wǎng)——每日最新資訊28at.com

12. 實戰(zhàn)演練:并發(fā)下載圖片

最后,讓我們實戰(zhàn)一把,用多線程下載圖片,感受并發(fā)的魅力。sKn28資訊網(wǎng)——每日最新資訊28at.com

import osimport requestsfrom threading import Threaddef download_image(url, filename):    response = requests.get(url)    with open(filename, 'wb') as f:        f.write(response.content)    print(f'{filename} downloaded.')urls = ['img_url1', 'img_url1']  # 假設(shè)的URLthreads = []for url in urls:    t = Thread(target=download_image, args=(url, os.path.basename(url)))    threads.append(t)    t.start()for t in threads:    t.join()print('All images downloaded.')

通過并發(fā)下載,我們可以顯著加快下載速度!sKn28資訊網(wǎng)——每日最新資訊28at.com

到這里,我們已經(jīng)解鎖了Python并發(fā)編程的12個實用技巧,是不是感覺自己的編程技能又上了一個新臺階?實踐是檢驗真理的唯一標(biāo)準(zhǔn),趕緊動手試試,讓你的程序跑得飛起來吧!sKn28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-90039-0.htmlPython 并發(fā)編程的 12 個實用技巧

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 阿里面試:說說自適應(yīng)限流?

下一篇: Vue3 實現(xiàn)最近很火的酷炫功能:卡片懸浮發(fā)光

標(biāo)簽:
  • 熱門焦點
  • 小米官宣:2023年上半年出貨量中國第一!

    今日早間,小米電視官方微博帶來消息,稱2023年小米電視上半年出貨量達(dá)到了中國第一,同時還表示小米電視的巨屏風(fēng)暴即將開始。“公布一個好消息2023年#小米電視上半年出貨量中國
  • 天貓精靈Sound Pro體驗:智能音箱沒有音質(zhì)?來聽聽我的

    這幾年除了手機(jī)作為智能生活終端最主要的核心之外,第二個可以成為中心點的產(chǎn)品是什么?——是智能音箱。 手機(jī)在執(zhí)行命令的時候有兩種操作方式,手和智能語音助手,而智能音箱只
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學(xué)習(xí)反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進(jìn)行反混淆,尤其是使用自定義混淆器對其進(jìn)行混淆時。什么是混
  • 一篇聊聊Go錯誤封裝機(jī)制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數(shù)中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 得物效率前端微應(yīng)用推進(jìn)過程與思考

    一、背景效率工程隨著業(yè)務(wù)的發(fā)展,組織規(guī)模的擴(kuò)大,越來越多的企業(yè)開始意識到協(xié)作效率對于企業(yè)團(tuán)隊的重要性,甚至是決定其在某個行業(yè)競爭中突圍的關(guān)鍵,是企業(yè)長久生存的根本。得物
  • 雅柏威士忌多款單品價格大跌,泥煤頂流也不香了?

    來源 | 烈酒商業(yè)觀察編 | 肖海林今年以來,威士忌市場開始出現(xiàn)了降溫跡象,越來越多不斷暴漲的網(wǎng)紅威士忌也開始悄然回歸市場理性。近日,LVMH集團(tuán)旗下蘇格蘭威士忌品牌雅柏(Ardbeg
  • 東方甄選單飛:有些鳥注定是關(guān)不住的

    作者:彭寬鴻來源:華爾街科技眼‍‍‍‍‍‍‍‍‍‍東方甄選創(chuàng)始人俞敏洪帶隊的“7天甘肅行”直播活動已在近日順利收官。成立后一
  • 榮耀Magicbook V 14 2021曙光藍(lán)版本正式開售,擁有觸摸屏

    榮耀 Magicbook V 14 2021 曙光藍(lán)版本正式開售,搭載 i7-11390H 處理器與 MX450 顯卡,配備 16GB 內(nèi)存與 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 鍵盤鍵程、
  • DRAM存儲器10月價格下跌,NAND閃存本月價格與上月持平

    10月30日,據(jù)韓國媒體消息,自今年年初以來一直在上漲的 DRAM 存儲器的交易價格僅在本月就下跌了近 10%,此次是全年首次降價,而NAND 閃存本月價格與上月持平。市
Top