Hallo
Ich werde eine Rails-Website einrichten, wo nach einigen anfänglichen Benutzereingaben einige schwere Berechnungen durchgeführt werden (via c-extension zu Ruby, wird Multithreading verwenden). Da diese Berechnungen fast die gesamte CPU-Zeit verbrauchen (auch Speicher), sollte nie mehr als eine Berechnung gleichzeitig ausgeführt werden. Außerdem kann ich keine (asynchronen) Hintergrundjobs (wie bei einem verzögerten Job) verwenden, da rails die Ergebnisse dieser Berechnung anzeigen muss und die Site ohne JavaScript funktionieren sollte.
also brauche ich einen separaten Prozess, wo alle Rails-Instanzen ihre Berechnungsanforderungen einreihen und auf die Antwort warten müssen (vielleicht eine Fehlermeldung, wenn die Warteschlange voll ist), eine Art synchroner Job-Manager.Ruby/Rails Synchron Job Manager
weiß jemand, ob es ein Juwel/Plugin mit solcher Funktionalität gibt? (nanite schien mir ziemlich cool, aber scheint nur asynchron zu sein, so die Schienen Instanzen würde nicht wissen, wenn die Berechnung abgeschlossen ist. Ist das korrekt?)
eine andere Idee ist, meine eigenen mit verteilten Ruby (DRB) zu schreiben, aber warum erfinde das Rad wieder, wenn es schon existiert?
jede Hilfe wäre willkommen!
EDIT: wegen Spitzen zaius ich glaube, ich der Lage sein, dies asynchron zu tun, also werde ich resque versuchen.
, dass metarefresh Sache möglich wäre, aber den Benutzer manuell die Seite neu zu laden, wenn die Berechnung nach der Aktualisierung nicht fertig ist, ist nicht in meinen Augen zu benutzerfreundlich. atm ich erwarte nicht zu viele Anfragen zur gleichen Zeit, also ist das Blockieren der Web-Threads kein großes Problem. aber du hast Recht, das ist kein schöner Weg, es zu tun. – user573335
Sie können die Metaaktualisierung so oft durchführen, wie Sie möchten - wenn der Job nach der ersten Aktualisierung nicht beendet ist, zeigt er dieselbe Aktualisierungsseite und zeigt nur die letzte Seite an, sobald der Job erledigt ist. – zaius
Nun, ich bin ein bisschen zögerlich, aber je mehr ich darüber nachdenke, desto besser scheint es, die Lösung asynchron zu sein, zumindest auf lange Sicht. Gibt es Job-Queues, die ich nach der erwarteten Task-Dauer fragen kann (aus einem Web-Thread) und die eine Fehlermeldung an den Web-Thread zurückgeben kann, wenn zu viele Jobs in der Warteschlange stehen? – user573335