python多進(jìn)程寫(xiě)入同一文件 為什么有人說(shuō)Python的多線(xiàn)程是雞肋呢?
為什么有人說(shuō)Python的多線(xiàn)程是雞肋呢?Gil lock限制了進(jìn)程中的不同線(xiàn)程在同一時(shí)間只能占用一個(gè)CPU。可以看出,當(dāng)使用多線(xiàn)程處理計(jì)算密集型任務(wù)時(shí),Python中的多個(gè)線(xiàn)程需要相互等待以獲得CP
為什么有人說(shuō)Python的多線(xiàn)程是雞肋呢?
Gil lock限制了進(jìn)程中的不同線(xiàn)程在同一時(shí)間只能占用一個(gè)CPU??梢钥闯?,當(dāng)使用多線(xiàn)程處理計(jì)算密集型任務(wù)時(shí),Python中的多個(gè)線(xiàn)程需要相互等待以獲得CPU資源。在這個(gè)時(shí)候,多線(xiàn)程不能并行,我們真的不具備預(yù)期的多線(xiàn)程能力。
但是,如果執(zhí)行的是Io密集型任務(wù),多個(gè)線(xiàn)程之間沒(méi)有太多CPU資源爭(zhēng)用,更多的是每個(gè)線(xiàn)程都在進(jìn)行Io傳輸和等待,此時(shí),多線(xiàn)程的能力還是可以發(fā)揮出來(lái)的。
所以我們不能簡(jiǎn)單地說(shuō)Python的多線(xiàn)程是雞肋,但是它的設(shè)計(jì)限制了它的應(yīng)用場(chǎng)景。
為什么python多線(xiàn)程這么慢?
這個(gè)問(wèn)題是您不理解多線(xiàn)程可以同時(shí)訪(fǎng)問(wèn)同一資源(非線(xiàn)程安全),這需要被鎖定。如何解決?請(qǐng)看下面的代碼
連接對(duì)象可以相同,指針不能相同。
假設(shè)conn是您的連接對(duì)象,每個(gè)線(xiàn)程使用cur=連接光標(biāo)()獲取指針。如果存在鎖定操作,則可能會(huì)發(fā)生等待。這是一個(gè)需要在數(shù)據(jù)庫(kù)級(jí)別處理的問(wèn)題。這取決于你的具體業(yè)務(wù)。例如,如果需要原子操作和連續(xù)寫(xiě)入,則在寫(xiě)入時(shí)應(yīng)注意使用事務(wù)或鎖定表。這些問(wèn)題可以通過(guò)建立自己的環(huán)境來(lái)認(rèn)識(shí)。