2016-03-20 42 views
4

networkx'da yönlendirilmiş bir asiklik grafiğim var. Her düğüm bir görevi temsil eder ve düğümlerin öncelikleri görev bağımlılıklarıdır (belirli bir görev, bağımlılıkları yürütülene kadar çalıştırılamaz).Ağ kuyruğu bir görev sırası olarak mı?

Grafiği, eşzamansız bir görev kuyruğunda, celery teklifine benzer şekilde çalıştırmayı (böylece, işleri durumları için sorgulayabilmem, sonuçları alma vb.) Yapmak istiyorum. Kereviz (bildiğim kadarıyla) ve tüm bağımlılıklar tamamlandığında (bir DAG'nin birden fazla yolu olabilir ve bir görev yavaşsa bile) task'a geçme yeteneğine sahip olma yeteneğini sunmaz. engelleme, diğer görevlere geçme vb. olabilir).

Bunu nasıl başarabileceğimi veya 'u celery ile nasıl entegre edebileceğine dair basit örnekler var mı?

+2

dask adlandırılan Aradığınız edilebilir: http://dask.pydata.org/en/latest/custom-graphs.html?highlight=graph – denfromufa

cevap

0

Bu fonksiyon yardımcı olabilir düşünüyorum:

# The graph G is represened by a dictionnary following this pattern: 
    # G = { vertex: [ (successor1: weight1), (successor2: weight2),... ] } 
    def progress (G, start): 
    Q = [ start ] # contain tasks to execute 
    done = [ ] # contain executed tasks 
    while len (Q) > 0: # still there tasks to execute ? 
     task = Q.pop(0) # pick up the oldest one 
     ready = True 
     for T in G:  # make sure all predecessors are executed 
      for S, w in G[T]: 
       if S == task and and S not in done:# found not executed predecessor 
       ready = False 
       break 
      if not ready : break 
     if not ready: 
      Q.appen(task) # the task is not ready for execution 
     else: 
      execute(task) 
      done.appen(task) # execute the task 
      for S, w in G[task]:# and explore all its successors 
       Q.append(S) 
+0

Hiçbir zaman görevleri gerçekleştiremezsiniz. –