Behandelt Ausnahmen im Thread-Pool mit gleichzeitigem Ruby-Thread

8

Wie behandelt man Exceptions in rubinroten Thread-Pools ( Ссылка )?

Beispiel:

%Vor%

Aktualisierung:

Hier ist eine vereinfachte Version meines Codes:

%Vor%

Was ich erreichen will, ist, die Verarbeitung (Break-Schleife) im Falle einer Ausnahme zu stoppen.

Diese Ausnahme wird auch auf einer höheren Anwendungsebene gerettet und es werden einige Reinigungsaufgaben ausgeführt (z. B. Einstellen des Zustands des Modells auf Fehler und Senden einiger Benachrichtigungen).

    
bartek1965 21.11.2016, 11:12
quelle

3 Antworten

2

Die folgende Antwort stammt von jdantonio von hier Ссылка

" Die meisten Anwendungen sollten Thread-Pools nicht direkt verwenden. Thread-Pools sind eine Low-Level-Abstraktion, die für den internen Gebrauch gedacht ist. Alle High-Level-Abstraktionen in dieser Bibliothek (Promise, Actor usw.) stellen alle Jobs in den globalen Thread-Pool und alle bieten die Ausnahmebehandlung. Wählen Sie einfach die Abstraktion aus, die am besten zu Ihrem Anwendungsfall passt, und verwenden Sie sie.

Wenn Sie Ihren eigenen Thread-Pool konfigurieren müssen, anstatt den globalen Thread-Pool zu verwenden, können Sie weiterhin die High-Level-Abstraktionen verwenden. Sie alle unterstützen eine: Executor-Option, mit der Sie Ihren eigenen Thread-Pool injizieren können. Sie können dann die von der Abstraktion auf hoher Ebene bereitgestellte Ausnahmebehandlung verwenden.

Wenn Sie unbedingt darauf bestehen, Jobs direkt in einem Thread-Pool zu veröffentlichen, anstatt unsere High-Level-Abstraktionen zu verwenden (was ich sehr ablehne), dann erstellen Sie einfach einen Job-Wrapper. Sie können Beispiele für Job-Wrapper in all unseren High-Level-Abstraktionen, Rails ActiveJob, Sucker Punch und anderen Bibliotheken finden, die unsere Thread-Pools verwenden. "

Wie wäre es also mit einer Implementierung mit Promises? Ссылка In Ihrem Fall würde es in etwa so aussehen:

%Vor%     
Doktor OSwaldo 22.12.2016, 15:08
quelle
0

Es mag einen besseren Weg geben, aber das funktioniert. Sie möchten die Fehlerbehandlung in wait_for_pool_to_finish ändern.

%Vor%     
grossadamm 07.12.2016 22:55
quelle
0

Ich habe ein Problem # 634 erstellt. Concurrent Thread-Pool kann abortable Worker ohne Probleme unterstützen.

%Vor%

Ausgabe:

%Vor%

Dieser Patch eignet sich für jede Version von MRI Ruby und Rubinius. JRuby funktioniert nicht und es ist mir egal. Bitte installieren Sie den JRuby-Executor, wenn Sie ihn unterstützen wollen. Es sollte einfach sein.

    
puchu 03.03.2017 11:54
quelle