Python多執行緒同步

2022-09-26 17:54:14 字數 3427 閱讀 6745

1、實現檔案讀寫的檔案ltz_schedule_times.py

#! /usr/bin/env python

#coding=utf-8

import os

def readtimes():

res =

if os.path.exists('schedule_times.txt'):

fp = open('schedule_times.txt', 'r')

else:

os.system('touch schedule_times.txt')

fp = open('schedule_times.txt', 'r')

try:

line = fp.read()

if line == none or len(line)==0:

fp.close()

return 0

tmp = line.split()

print 'tmp:程式設計客棧 ', tmp

schedule_times = int(tmp[-1])

finally:

fp.close()

#print schedule_times

return schedule_times

def writetimes(schedule_times):

if schedule_times <= 10:

fp = open('schedule_times.txt', 'a+')#10以內追加進去

else:

fp = open('schedule_times.txt', 'w')#10以外重新寫入

schedule_times = 1

print 'write schedule_times start!'

try:

fp.write(str(schedule_times)+'\n')

finally:

fp.close()

print 'write schedule_times finish!'

if __name__ == '__main__':

schedule_times = readtimes()

#if sched > 10:

# schedule_times = 0

print schedule_times

schedule_times = schedule_times + 1

writetimes(schedule_times)

2.1、不加鎖對檔案進行多執行緒讀寫。

file_lock.py

#! /usr/bin/env python

#coding=utf-8

from threading import thread

import threading

import time

from ltz_schedule_times import *

#1、不加鎖

def lock_test():

time.sleep(0.1)

schedule_times = readtimes()

print schedule_times

schedule_times = schedule_times + 1

writetimes(schedule_times)

if __name__ == '__main__':

for i in range(5):

thread(target = lock_test, args=()).start()

得到結果:

0write schedule_times start!

write schedule_times finish!

tmp: tmp: tmp: tmp: [[[['1''1''1''1']]]]111

1write schedule_times start!write schedule_times start!

write schedule_times start!write schedule_times start!

write schedule_times finish!

wri schedule_times finish!

write schedule_times finish!write schedule_times finish!

檔案寫入結果:

以上結果可以看出,不加鎖多執行緒讀寫檔案會出現錯誤。

2.2、加鎖對檔案進行多執行緒讀寫。

file_lock.py

#! /usr/bin/env python

#coding=utf-8

from threading import thread

import threading

import time

from ltz_schedule_times import *

#2、加鎖

mu = threading.lock() #1、建立乙個鎖

def lock_test():

#time.sleep(0.1)

if mu.acquire(true): #2、獲取鎖狀態,乙個執行緒有鎖時,別的執行緒只能在外面等著

schedule_times = readtimes()

print schedule_times

schedule_times = schedule_times + 1

writetimes(schedule_times)

mu.release() #3、釋放鎖

if __name__ =rzive= '__main__':

for i in range(5):

thread(target = lock_test, args=()).start()

結果:0

write schedule_times start!

write schedule_times finish!

tmp: ['1']

1write schedule_times start!

write schedule_times finish!

tmp: ['1', '2']

2write schedule_times start!

write schedule_times finish!

tmp: ['1', '2', '3']

3write schedule_times start!

write schedule_times finish!

tmp: ['1', '2', '3', '4'rzive]

4write schedule_times start!

write schedule_times finish!

檔案寫入結果:

本文標題: python多執行緒同步---檔案讀寫控制方法

本文位址:

python 多執行緒5執行緒同步

互斥鎖是最簡單的執行緒同步機制,python提供的condition物件提供了對複雜執行緒同步問題的支援。condition被稱為條件變數,除了提供與lock類似的acquire和release方法外,還提供了wait和notify方法。執行緒首先acquire乙個條件變數,然後判斷一些條件。如果條...

Python 多執行緒3 同步執行緒

現在假設這樣乙個例子 有乙個全域性的計數num,每個執行緒獲取這個全域性的計數,根據num進行一些處理,然後將num加1。很容易寫出這樣的 encoding utf 8 import threading import time class mythread threading.thread def ...

Python多執行緒同步學習

多個執行執行緒經常要共享資料,如果僅僅讀取共享資料還好,但是如果多個執行緒要修改共享資料的話就可能出現無法預料的結果。同步 鎖 機制 鎖物件用threading.rlock類建立 mylock threading.rlock 如何使用鎖來同步執行緒呢?執行緒可以使用鎖的acquire 獲得 方法,這...