python線程安全及多進(jìn)程多線程實(shí)現(xiàn)方法詳解
進(jìn)程和線程的區(qū)別
- 進(jìn)程是對(duì)運(yùn)行時(shí)程序的封裝,是系統(tǒng)資源調(diào)度和分配的基本單位
- 線程是進(jìn)程的子任務(wù),cpu調(diào)度和分配的基本單位,實(shí)現(xiàn)進(jìn)程內(nèi)并發(fā)。
- 一個(gè)進(jìn)程可以包含多個(gè)線程,線程依賴進(jìn)程存在,并共享進(jìn)程內(nèi)存
什么是線程安全
一個(gè)線程的修改被另一個(gè)線程的修改覆蓋掉。
python中哪些操作是線程安全的
- 一個(gè)操作可以在多線程環(huán)境中使用,并且獲得正確的結(jié)果。
- 線程安全的操作線程是順序執(zhí)行的而不是并發(fā)執(zhí)行的。
- 一般涉及到寫操作需要考慮如何讓多個(gè)線程安全訪問數(shù)據(jù)。
線程同步的方式
- 互斥量(鎖): 通過互斥機(jī)制防止多個(gè)線程同時(shí)訪問公共資源。
- 信號(hào)量(Semphare): 控制同一時(shí)刻多個(gè)線程訪問同一個(gè)資源的線程數(shù)。 ps:python的threading 文檔
- 事件(信號(hào)): 通過通知的方式保持多個(gè)線程的同步。
進(jìn)程間的通信方式 (IPC:Inter-Process Communication 進(jìn)程間傳遞信號(hào)或者數(shù)據(jù))
- 管道/匿名管道/有名管道(pipe)
- 信號(hào)(Signal):比如用戶使用ctrl+c產(chǎn)生SIGINT程序終止信號(hào)
- 消息隊(duì)列(Message)
- 共享內(nèi)存(share memory)
- 進(jìn)程間的信號(hào)量(Semaphore)
- 套接字(socket):最常用的方式,我們的web應(yīng)用就是這種方式
多線程的例子
# python實(shí)現(xiàn)多線程
import threading
lock = threading.Lock()
n = [0]
def foo():
with lock: # 加鎖
n[0] = n[0] + 1
n[0] = n[0] + 1
threads = [] # 用來儲(chǔ)存所有線程
for i in range(5000):
t = threading.Thread(target=foo) # 傳入foo函數(shù)
threads.append(t)
for t in threads:
t.start()
print(n)
多進(jìn)程的例子
python有GIL,可以用多進(jìn)程實(shí)現(xiàn)cpu密集程序
- multiprocessing 多進(jìn)程模塊
- multiprocessing.Process 類實(shí)現(xiàn)多進(jìn)程
- 一般在cpu密集的程序里面使用多進(jìn)程,避免GIL的影響
# 多進(jìn)程
import multiprocessing
def fib(n):
if n<= 1:
return 1
return fib(n-1) + fib(n-2)
if __name__ == '__main__':
jobs = []
for i in range(10,20):
p = multiprocessing.Process(target=fib, args=(i,))
jobs.append(p)
p.start()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
計(jì)算pytorch標(biāo)準(zhǔn)化(Normalize)所需要數(shù)據(jù)集的均值和方差實(shí)例
今天小編就為大家分享一篇計(jì)算pytorch標(biāo)準(zhǔn)化(Normalize)所需要數(shù)據(jù)集的均值和方差實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01
Python實(shí)現(xiàn)遍歷大量表格文件并篩選出數(shù)據(jù)缺失率低的文件
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)遍歷大量表格文件并篩選出表格內(nèi)數(shù)據(jù)缺失率低的文件的功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-05-05
Python開發(fā)網(wǎng)站目錄掃描器的實(shí)現(xiàn)
這篇文章主要介紹了Python開發(fā)網(wǎng)站目錄掃描器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
Python?Prometheus接口揭秘?cái)?shù)據(jù)科學(xué)新技巧
本篇文章將分享Prometheus?API的基本概念到PromQL查詢語言的應(yīng)用,再到如何通過Python與Prometheus?API進(jìn)行無縫交互,通過豐富的示例代碼和詳細(xì)的講解,將解鎖使用Python進(jìn)行實(shí)時(shí)監(jiān)控的奇妙世界,為讀者打開更廣闊的數(shù)據(jù)分析視野2024-01-01
Python爬蟲實(shí)例之2021貓眼票房字體加密反爬策略(粗略版)
這篇文章主要介紹了Python爬蟲實(shí)例之2021貓眼票房字體加密反爬策略(粗略版),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02

