python 64式 第13式 執行緒

2021-08-31 06:56:03 字數 1393 閱讀 7204

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import time

import threading

'''關鍵:

1 併發和並行

併發:交替處理多個任務的能力; 關鍵在併發交替

並行:同時處理多個任務的能力; 關鍵在並行同時

2 多程序與多執行緒

多程序可以充分使用多個cpu

多執行緒不能充分使用多個cpu,原因是全域性直譯器鎖保證同一時刻只能有乙個執行緒可以執行**。

本質: 每個執行緒執行時,都需要先獲取全域性直譯器鎖

解決方法: 使用多程序完成多工的處理

3 gil鎖與互斥鎖

gil鎖:同一時刻只有乙個執行緒使用cpu

互斥鎖:多執行緒對共享資料的有序修改

4 threading.thread(target=none, args=(), kwargs={})

使用執行緒的方式:

方式1: 將要執行的方法放入執行緒中

the = threading.thread(target=myrun, args=(), kwargs{})

the.start()

the.join() # 等待執行緒完成才退出

方式2: 繼承執行緒類,重寫run方法

class mythread(threading.thread):

def run(self):

pass

5 執行緒鎖

mutex = threding.lock()

if mutex.acquire():

pass

mutex.release()

參考:'''g_mutex = threading.lock()

g_num = 0

def myrun(sleeptime):

time.sleep(sleeptime)

global g_num

if g_mutex.acquire():

g_num += 1

g_mutex.release()

def usemutex():

threadlist =

for i in range(3):

the = threading.thread(target=myrun, args=(0.1,))

the.start()

# 等待所有執行緒完成

for the in threadlist:

the.join()

assert g_num == 3

def process():

usemutex()

if __name__ == "__main__":

process()

python 64式 第10式 深淺拷貝

usr bin env python coding utf 8 import copy 關鍵 1 深拷貝 拷貝了物件所有元素,包含巢狀元素。是與原來物件無關的全新物件。無關性。2 淺拷貝 建立新物件,但新物件中各個元素是原物件對應各個元素的引用。3 舉例如下 a 1,2,3 c copy.copy ...

python 64式 第6式 定時器

usr bin env python coding utf 8 import logging import sys from datetime import datetime from oslo config import cfg from oslo log import log from oslo...

python 64式 第49式 dict原始碼分析

目標 弄清楚python中dict的實現原理 1.1 原理 python的字典實際是雜湊表,通過雜湊函式將key對映到表中的位置來 儲存value。存在不同物件經過雜湊函式得到的雜湊值可能相同,此時 採用開放定址法來解決衝突。開放定址法通過二次探測函式f尋找下乙個候選位置,若位置可用,則將資料插入。...