91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python線程安全及多進程多線程實現方法詳解

發布時間:2020-10-01 22:09:58 來源:腳本之家 閱讀:204 作者:DRQ丶 欄目:開發技術

進程和線程的區別

  • 進程是對運行時程序的封裝,是系統資源調度和分配的基本單位
  • 線程是進程的子任務,cpu調度和分配的基本單位,實現進程內并發。
  • 一個進程可以包含多個線程,線程依賴進程存在,并共享進程內存

什么是線程安全

一個線程的修改被另一個線程的修改覆蓋掉。

python中哪些操作是線程安全的

  • 一個操作可以在多線程環境中使用,并且獲得正確的結果。
  • 線程安全的操作線程是順序執行的而不是并發執行的。
  • 一般涉及到寫操作需要考慮如何讓多個線程安全訪問數據。

線程同步的方式

  • 互斥量(鎖): 通過互斥機制防止多個線程同時訪問公共資源。
  • 信號量(Semphare): 控制同一時刻多個線程訪問同一個資源的線程數。 ps:python的threading 文檔
  • 事件(信號): 通過通知的方式保持多個線程的同步。

進程間的通信方式 (IPC:Inter-Process Communication 進程間傳遞信號或者數據)

  • 管道/匿名管道/有名管道(pipe)
  • 信號(Signal):比如用戶使用ctrl+c產生SIGINT程序終止信號
  • 消息隊列(Message)
  • 共享內存(share memory)
  • 進程間的信號量(Semaphore)
  • 套接字(socket):最常用的方式,我們的web應用就是這種方式

多線程的例子

# python實現多線程
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函數
  threads.append(t)
for t in threads:
  t.start()

print(n)

多進程的例子

python有GIL,可以用多進程實現cpu密集程序

  • multiprocessing 多進程模塊
  • multiprocessing.Process 類實現多進程
  • 一般在cpu密集的程序里面使用多進程,避免GIL的影響
# 多進程

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()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开江县| 德州市| 集贤县| 张掖市| 清水河县| 光泽县| 新昌县| 台州市| 乐亭县| 江城| 谢通门县| 蓝山县| 仙居县| 隆德县| 隆回县| 古交市| 迭部县| 遂昌县| 泸州市| 葵青区| 乌拉特后旗| 梧州市| 宁安市| 雅安市| 林甸县| 梨树县| 卫辉市| 邛崃市| 和田县| 舟曲县| 花莲县| 阜康市| 白银市| 鹿泉市| 凤城市| 搜索| 弥勒县| 瓮安县| 桂东县| 泰安市| 鄂托克旗|