2012-05-15 18 views
12

dinamik çoklu paralel görevler arasında evsahibi değiştirmek için bir yolu var mı? Şimdiye kadar sahip olduğum şey bu. task_1 gerçekleştirmesi durumunda ana çalıştırmak için task_2 Kumaş kütüphanesi ile Dinamik Sunucular ve Paralel Görevler

def init_hosts(): 
    env.hosts = [host1,host2,host3,host4] 

@parallel 
def task_1(): 
    if condition is False: 
     env.hosts.remove(env.host) 

@parallel 
def task_2(): 
    run('uname -s') 

Açıkçası bazı env paramenters özlüyorum, ama ben sadece istiyorum. task_2'un ana bilgisayar başlangıç ​​listesi başlangıçta başlatıldı, çünkü init_hosts()'da tanımlanan ilk env.hosts listesinde tüm ana bilgisayarlarda çalışıyor. Aynı zamanda dinamik olarak değiştirmeyi ve roledef oluşturmayı denedim ama aynı sonucu aldım.

Düzenleme: Ayrıca, çoklu paralel görevler sırayla paralel ziyade içinde yürütülür şekilde paralel yürütme kuyruğu kurulum için bir yol var?

Düzenleme: I) (yürütmek geçmek için her görev dönüşü çıkışını sahip ve yeni ev sahibi listesi oluşturmak için çıkış ayrıştırma benim istenen sonucu başardı:

def init_hosts(): 
    env.hosts = [host1,host2,host3,host4] 

@parallel 
def task_1(): 
    if condition is False: 
     return False 
    else: 
     return True 

@parallel 
def task_2(): 
    run('uname -s') 

def run_tests(): 
    results = execute(task_1) 
    successful_hosts = [k for k in results.iterkeys() if results[k]] 
    execute(test_2, hosts=successful_hosts) 

Bu çalışır, ancak var pek çok nedenden dolayı brüt. Daha iyi bir yolu var mı?

cevap

3

Paralel yürütme, çatalları kullanır ve bu nedenle durum değişikliklerini (geri) paylaşmaz. Yani paralel çalışan tek kişi görev bir env değişkeni değiştirerek bu görev çalışan diğer herhangi bir örneğini etkilemez, ne de denirdi önce genel olarak ayarlanabilir şeyi değiştirir.

tüm task_1 hiç yapıyorsa bir çek, neden sadece task_2 içine bu mantığı dahil mi?

İlgili konular