wie eine große Anzahl von Aufgaben zu drosseln, ohne alle Arbeiter zu verwenden

8

Stellen Sie sich vor, ich habe ein Raster mit 10 Arbeitern & amp; 40 Kerne summiert sich. Dies ist ein geteiltes Raster, also möchte ich es nicht vollständig mit meiner Arbeit sättigen. Ich habe 1000 Aufgaben zu erledigen, und ich möchte maximal 20 Aufgaben gleichzeitig ausführen (und aktiv ausführen).

Um konkret zu sein,

%Vor%

Wenn ich ein System von Warteschlangen einrichten

%Vor%

Das wird funktionieren, ABER, das wird einfach alle meine Aufgaben an das Gitter ablegen und es sättigen. Idealerweise könnte ich:

%Vor%

Es scheint, dass das Beispiel aus der Dokumentation hier mir erlauben würde, ein% co_de zu verwenden % Warteschlange. Aber das sieht aus, als hätte ich aus Nutzersicht noch mit dem Gegendruck zu tun. Im Idealfall würde maxsize automatisch dafür sorgen.

    
Jeff 12.08.2016, 15:28
quelle

2 Antworten

6

Verwende maxsize=

Sie sind sehr nah dran. Alle von scatter , gather und map nehmen das gleiche maxsize= Schlüsselwortargument, das Queue benötigt. Ein einfacher Workflow könnte also wie folgt aussehen:

Beispiel

%Vor%

Alle von q , futures und results sind Python-Warteschlangenobjekte. Die Warteschlangen q und results haben kein Limit, also ziehen sie gierig so viel wie möglich hinein. Die futures -Warteschlange hat jedoch eine maximale Größe von 20, so dass zu einem bestimmten Zeitpunkt nur 20 Futures im Flug erlaubt sind. Sobald die führende Zukunft abgeschlossen ist, wird sie sofort von der Sammelfunktion verbraucht und ihr Ergebnis wird in die Warteschlange results gestellt. Dies gibt Speicherplatz in futures frei und bewirkt, dass eine andere Aufgabe gesendet wird.

Beachten Sie, dass dies nicht genau das ist, was Sie wollten. Diese Warteschlangen sind so angeordnet, dass Futures nur dann abgeklopft werden, wenn sie sich an der Spitze der Warteschlange befinden. Wenn alle In-Flight-Futures außer dem ersten abgeschlossen sind, bleiben sie immer noch in der Warteschlange und belegen Platz. Angesichts dieser Einschränkung möchten Sie vielleicht ein maxsize= etwas mehr als Ihre gewünschten 20 Elemente wählen.

Erweitere dies

Hier machen wir eine einfache map->gather -Pipeline ohne Logik dazwischen. Sie könnten auch andere map -Berechnungen hier eingeben oder sogar Futures aus den Warteschlangen herausholen und selbständig mit ihnen arbeiten. Es ist leicht, aus der oben genannten Form auszubrechen.

    
MRocklin 12.08.2016, 15:40
quelle
1

Die auf github veröffentlichte Lösung war sehr nützlich - Ссылка

Lösung:

%Vor%

Abfrage:

Um jedoch die Arbeiter zu bestimmen, die frei sind, die Aufgaben zu drosseln, versuche ich, den Client zu nutzen.has_what () api. Es scheint so, als würde die Last auf den Arbeitern nicht sofort reflektiert, ähnlich wie auf der Status-UI-Seite. Manchmal dauert es eine Weile, bis has_what irgendwelche Daten wiedergibt.

Gibt es ein anderes API, das verwendet werden kann, um die Anzahl der freien Arbeiter zu bestimmen, die dann verwendet werden können, um den Drosselungsbereich ähnlich dem zu bestimmen, was UI verwendet.

    
Ameet Shah 27.03.2018 22:12
quelle

Tags und Links