Çok sayıda alt problem içeren büyük bir sayısal problemi çözmeye çalışıyorum ve farklı çekirdekler üzerine farklı bağımsız alt problemleri ayırmak için Python'un çoklu işlem modülünü (özellikle Pool.map) kullanıyorum. Her alt problem bir çok alt-alt-problemin hesaplanmasını içerir ve bu sonuçları henüz herhangi bir işlemle hesaplanmamışlarsa bir dosyaya saklayarak etkin bir şekilde belleğe almaya çalışıyorum, aksi halde hesaplamayı atlayın ve sadece sonuçları dosyadan okuyun.Python çoklu işleme güvenli bir şekilde bir dosyaya yazıyor
Dosyaları ile eşzamanlılık sorunları yaşıyorum: farklı işlemler bazen bir alt-altproblemin hesaplanmış olup olmadığını (sonuçların saklanacağı dosyaya bakarak) kontrol edip, olmadığını görüyorlar. hesaplamayı çalıştırın, ardından sonuçları aynı dosyaya aynı anda yazmaya çalışın. Böyle çarpışmalar yazmayı nasıl önleyebilirim?
ara dışında kullanılan belgeleri bir örnek [ 'multiprocessing.Lock'] (http://docs.python.org/2/library/multiprocessing.html#synchronization-between-processes), birden çok eşitlemek süreçler. –
Diğer çalışan işlemleriyle beslenebilecek bir girdi olarak Kuyruk ile tek bir işlem yazma sonucuna sahip olabilirsiniz. Tüm işçi süreçlerinin salt okunur olması güvenli olacağına inanıyorum. – GP89
İşlerimi daha karmaşık hale getirmek için, aynı ağa bağlı dosya sisteminde alt-alt-sorunlara her bir sonuç yazarken, aynı anda bir kümede birden çok farklı büyük ana problemi çalıştırdığımı belirtmeliydim. Böylece birbirinden ayrı makinelerde çalışan süreçlerden kaynaklanan çarpışmaları tamamen alabiliyorum (bu yüzden çoklu işlem gibi çözümler kullanmıyorum. Kilit işe yarayacaktır). –