Paralel işlemede denen bir işlev var, myfunc
. Birden fazla işlem aynı hedef klasörü paylaştığımda, hepsi paralel olarak myfunc
'u arar ve hedef klasörün varlığını kontrol eder. Zaten var olsaydı sorun yok. Ancak, komut dosyasının başlatılmasından önce klasör mevcut değilse, ilk işlem, if bloğuna girer ve klasörü oluşturur. Öte yandan, hemen hemen aynı anda "hemen hemen" aynı anda girecek, klasörün bulunamayacağı ve bunu oluşturmaya çalışacak bir başka süreç de olacaktır. zaten yaptı. Yani bir noktada, zaten var olan klasöre söylüyorum bir OSError
olacaktır.doğru işlem yaparken dosya varlığını doğru şekilde kontrol ediliyor
Çok işlem yaparken bu sorunla başa çıkmak için temiz bir yol var mı? Süreçlerimi başlatmadan önce hedef klasörün işlevini myfunc
dışında tutmayı düşünüyorum. Ancak bilgi işlem için çok işlemciyi kullanarak bir çözüm bulmak güzel olurdu. eşzamanlılık sorunlarını çözmek için threading
modülünden
import os, sys
def myfunc(file_names, destination=None, file_permission=None, verbose=False):
absPath = os.path.abspath(file_names[0])
baseName = os.path.basename(absPath)
dirName = os.path.dirname(absPath)
destination_folder = "/default/destination" if destination is None \
else os.path.abspath(destination)
if not os.path.isdir(destination_folder):
os.mkdir(destination_folder)
os.chmod(destination_folder, file_permission)
if verbose:
print "Created directory", destination_folder
Peki, istisnayı yakalayın? – BlackBear