2017-07-27 2 views
1

Ich habe die Dokumentation über neue Prozesse von einer Aufgabe auf einem Arbeiter ausgeführt. Ich kam in diesem von here:Sezieren von Aufgaben aus Thread-Pools in dask verteilt

jedoch jede ausgeführte Aufgabe einen einzigen Thread in Anspruch nimmt, und so, wenn Sie viele Aufgaben starten, die anderen Aufgaben starten, dann ist es möglich, das System in einer Sackgasse, wenn Sie nicht vorsichtig sind. Sie können innerhalb einer Aufgabe aus der secede Funktion aufrufen, um es sich von dem dedizierten Thread-Pool in einem Verwaltungs Faden entfernen, die nicht mit einem Schlitz in der Dask Arbeiter

Was bedeutet es, ein Verwaltungs bedeuten dauert bis zu bewegen Faden? Sind alle Steckplätze gleich oder ähnlich? Und der administrative Thread hat Priorität?

Als ein konkretes Beispiel, hier ist das, was von Ich denke versuchen:

from dask.distributed import get_client, secede 

def compute_square(x): 
    # Get locally created client 
    client = get_client() 
    secede() # or not? 
    if x > 5: 
     client.submit(lambda x : x**2, x) 

wo compute_square und die lambda Funktion möglicherweise schon ein paar Mal durchgeführt werden konnte und eine rechenintensive Funktion lohnen würde der Aufwand von 1 ms beim Senden von Jobs. Sollte ich in diesem Fall secede verwenden?

Antwort

1

Was bedeutet es, in einen administrativen Thread zu wechseln?

Dask Worker verwalten einen Threadpool fester Größe für die Ausführung von Aufgaben. Wenn Sie secede aufrufen, verlässt Ihre Berechnung diesen Thread-Pool und öffnet einen anderen Steckplatz für andere Aufgaben stattdessen ausgeführt werden. Der Thread Ihrer Aufgabe existiert weiterhin, ist aber nur ein normaler Thread. Der Begriff "administrativer Thread" bedeutet nichts anderes als "ein Thread nicht im Thread-Pool".

Sind alle Steckplätze gleich oder ähnlich?

Sobald Aufgaben ausgeführt werden, gibt es keine Priorität zwischen ihnen. Sie laufen alle in normalen Python-Threads, für die es keine Priorisierung gibt.

Und der administrative Thread hat Priorität?

Kein

Sollte ich in diesem Fall abspalten verwenden?

sollten Sie secede anrufen, wenn

  1. Es gibt eine Möglichkeit, dass Sie genug Aufgaben nennen, die alle warten auf andere Aufgaben, so dass keine Tasks beenden kann, weil alle Threads Thread-Becken warten um andere Slots zu öffnen.
  2. Sie beabsichtigen nicht, viel mehr Arbeit in dieser Aufgabe zu tun

Sie nicht secede wenn

  1. Sie viel mehr zu tun beabsichtigen in der Aufgabe rechnerisch gebunden Arbeit nennen sollten, nachdem Sie secede nennen. Dies wäre immer noch in Ordnung, aber es ist etwas unhöflich, weil Dask sich wohl fühlen wird, einige dieser Aufgaben ohne irgendwelche Einschränkungen zu starten.
Verwandte Themen