日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

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

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

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

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

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

1. 遇見threading,多線程初體驗(yàn)

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

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

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

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

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

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

如果想真正利用多核CPU,multiprocessing模塊是你的不二之選。它為每個(gè)進(jìn)程創(chuàng)建獨(dú)立的Python解釋器,繞過GIL。JZi28資訊網(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()

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

4. 并行不是萬能藥

并發(fā)或并行雖然快,但也會帶來復(fù)雜性,比如數(shù)據(jù)同步問題。記得使用鎖(Lock)來避免資源沖突,就像在廚房里只有一個(gè)微波爐,大家輪流用。JZi28資訊網(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語句自動(dòng)管理鎖,安全又方便。JZi28資訊網(wǎng)——每日最新資訊28at.com

5. 隊(duì)列的智慧:queue.Queue

想象一個(gè)工廠的流水線,隊(duì)列(Queue)就是那個(gè)協(xié)調(diào)者。在多線程/進(jìn)程間傳遞數(shù)據(jù),非它莫屬。JZi28資訊網(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()

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

6. 美妙的異步:asyncio

等不及了?asyncio帶你進(jìn)入異步編程的世界,用async/await關(guān)鍵字,就像給你的代碼加了翅膀。JZi28資訊網(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())

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

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

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

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

想要簡單地并發(fā)執(zhí)行任務(wù),不論同步還是異步,concurrent.futures是你的良師益友。JZi28資訊網(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ù)就像點(diǎn)菜一樣簡單。JZi28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

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

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

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

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

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

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

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

最后,讓我們實(shí)戰(zhàn)一把,用多線程下載圖片,感受并發(fā)的魅力。JZi28資訊網(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ā)下載,我們可以顯著加快下載速度!JZi28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

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

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價(jià)比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機(jī)潮已經(jīng)過去,最明顯的肯定就是大內(nèi)存和存儲的機(jī)型了,另外部分中端機(jī)也取消了屏幕塑料支架
  • 0糖0卡0脂 旭日森林仙草烏龍茶優(yōu)惠:15瓶到手29元

    旭日森林無糖仙草烏龍茶510ml*15瓶平時(shí)要賣為79.9元,今日下單領(lǐng)取50元優(yōu)惠券,到手價(jià)為29.9元。產(chǎn)品規(guī)格:0糖0卡0脂,添加草本仙草汁,清涼爽口,富含茶多酚,保留
  • Flowable工作流引擎的科普與實(shí)踐

    一.引言當(dāng)我們在日常工作和業(yè)務(wù)中需要進(jìn)行各種審批流程時(shí),可能會面臨一系列技術(shù)和業(yè)務(wù)上的挑戰(zhàn)。手動(dòng)處理這些審批流程可能會導(dǎo)致開發(fā)成本的增加以及業(yè)務(wù)復(fù)雜度的上升。在這
  • 騰訊蓋樓,字節(jié)拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之“想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗(yàn)嗎?一起上晶核,即刻暴打!”曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 當(dāng)家的盒馬,加速謀生

    來源 | 價(jià)值星球Planet作者 | 歸去來自己“當(dāng)家”的盒馬,開始加速謀生了。據(jù)盒馬官微消息,盒馬計(jì)劃今年開放生鮮供應(yīng)鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經(jīng)與
  • 小米汽車電池信息疑似曝光:容量101kWh,支持800V高壓快充

    7月14日消息,今日一名博主在社交媒體發(fā)布了一張疑似小米汽車電池信息的照片,顯示該電池包正是寧德時(shí)代麒麟電池,容量為101kWh,電壓為726.7V,可以預(yù)測小
  • 三星折疊屏手機(jī)去年銷售近1000萬臺 今年目標(biāo)定為1500萬

    7月29日消息,三星率先發(fā)力可折疊手機(jī)市場,在全球市場已經(jīng)取得了非常亮眼的成績,接下來會進(jìn)一步鞏固和擴(kuò)大這一優(yōu)勢。三星在推出Galaxy Z Flip5和Galax
  • iQOO 11S評測:行業(yè)唯一的200W標(biāo)準(zhǔn)版旗艦

    【Techweb評測】去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強(qiáng)機(jī),該機(jī)不僅全球首發(fā)2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競
  • OPPO Reno10 Pro英雄聯(lián)盟定制禮盒公布:薩勒芬妮同款配色夢幻十足

    5月24日,OPPO推出了全新的OPPO Reno 10系列,包含OPPO Reno10、OPPO Reno10 Pro和OPPO Reno10 Pro+三款新機(jī),全系標(biāo)配了超光影長焦鏡頭,是迄今為止拍照
Top 主站蜘蛛池模板: 和龙市| 弥渡县| 阳朔县| 新郑市| 陕西省| 通山县| 临湘市| 黑龙江省| 溧阳市| 扶沟县| 榆社县| 连山| 阳江市| 五常市| 灵璧县| 玉山县| 罗江县| 金川县| 金坛市| 泗水县| 台东市| 哈巴河县| 华池县| 泊头市| 万荣县| 白朗县| 瓦房店市| 和平县| 金寨县| 义乌市| 遂平县| 灵武市| 兴山县| 西丰县| 松溪县| 彭阳县| 柳河县| 腾冲县| 长宁县| 镇巴县| 荆州市|