是不是不共享資料就不會發生執行緒不安全?
執行緒安全就是多執行緒訪問時,採取了加鎖的機制,當乙個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進行訪問知道該執行緒讀取完,其他的執行緒才可使用,不會出現資料不一致或資料汙染的問題執行緒不安全就是不提供資料訪問保護,有可能出現多個執行緒現後更改資料造成所得到的資料是髒資料。
總的來說,只要執行緒之間沒有共享資源,那麼就是執行緒安全的,有共享資源,為了保證執行緒安全,需要引進鎖的機制。
lis = list(range(10000))
print(lis)
print(len(lis))
from share_var import gloable
import threading
def consume():
for i in gloable.lis:
with open('aab.txt', 'a+') as file:
file.write('{},{}\n'.format(i, threading.current_thread().name))
if __name__ == '__main__':
from threading import thread
t1 = thread(target=consume, name='t1')
t2 = thread(target=consume, name='t2')
t3 = thread(target=consume, name='t3')
t4 = thread(target=consume, name='t4')
t1.start()
t2.start()
t3.start()
t4.start()
t1.join()
t2.join()
t3.join()
t4.join()
from share_var.gloable import lis
import threading
def consume():
for i in lis:
with open('aabc.txt', 'a+') as file:
file.write('{},{}\n'.format(i, threading.current_thread().name))
if __name__ == '__main__':
from threading import thread
t1 = thread(target=consume, name='t1')
t2 = thread(target=consume, name='t2')
t3 = thread(target=consume, name='t3')
t4 = thread(target=consume, name='t4')
t1.start()
t2.start()
t3.start()
t4.start()
t1.join()
t2.join()
t3.join()
t4.join()
以上**的區別就是在引入全域性變數的時候 在引入包 和引入變數的區別
執行的效果呢,
-rw-r--r-- 1 lishulong 197121 355506 mar 18 23:07 aab.txt
-rw-r--r-- 1 lishulong 197121 355537 mar 18 23:07 aabc.txt
發現結構不相同;
環境:$ python -v
python 3.6.2rc1
得出對於共享的全域性 lis 是不安全的在不同的執行緒中??
單執行緒跑 ok。
只要是多執行緒,即使不共享也會出現問題,是gil的問題嗎
dist的話,可不好找,,,,,
這個問題也就這樣吧,,,,
python中改變list中list值的問題
l s 0,0,0 for i in range 3 l 1 1 1 print l 如上 定義乙個空list,新增元素也為list型別。本意是想改變list l中乙個值,使其結果為 0,0,0 0,1,0 0,0,0 但執行的結構下圖所示,將list l中的所有元素都改變了。為找到原因,檢視pyt...
python判斷是否是素數
在python中實現 取出某個數值區間範圍內的所有素數 prime 素數定義為 對於乙個正整數n,如果除了1和它本身,它再不能被任何正整數整除,則它是素數 質數 定義2是最小的素數 import math import time def is prime num return 0 not in nu...
python檢測是否是質數
編寫python指令碼,使得實現以下功能 輸入乙個整數,通過指令碼判斷出輸入的這個數是否是質數,然後輸出是否是質數。指令碼如下圖所示 num input please input a integer i 2 while i num if num i 0 print is not a prime nu...