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

