Wenn Steemit-Bots abstürzen... Meine Lösung!

in #steemit6 years ago

Steemit-Bots

Mein Problem waren nach dem HF20 die häufigen Aussetzer der API-Nodes, weshalb die Bots und Programme, die ich davor geschrieben habe, nicht mehr zuverlässig funktionieren. Da ich irgendwie immer Probleme habe, Lösungen im Internet zu finden, habe ich jetzt doch eine Weile dafür gebraucht, sie selbst zu finden.
Immer wenn ich eine längere Zeit von der Blockchain mittels Python lese, tritt das Problem zufälligerweise auf.

from beem.blockchain import Blockchain

b = Blockchain()

def loop():
    for op in b.stream(opNames=['transfer']):
        print(op)

if __name__ == '__main__':
    loop()

Das ist der Grundaufbau, wie ich ihn immer benutzt habe. Er läuft, solang die Nodes antworten. Wenn eine Node einen Timeout verursacht, wechselt die Beem-API zu einer anderen Node. Sobald aber zwei Nodes aufeinanderfolgend versagen, gibt es eine Fehlermeldung und das Programm stürzt ab.

from beem.blockchain import Blockchain

b = Blockchain()

def loop():
    for op in b.stream(opNames=['transfer']):
        print(op)

if __name__ == '__main__':
    while True:
        try:
            loop()
        except Exception:
            pass  # ignorieren oder eine Fehlermeldung ausgeben

Das wäre meine "Lösung" wenn der Code in der loop() versagt, wird er automatisch neu gestartet. Das geht so einfach, wenn man Votingbots wie den @germanbot hat, bei denen nichts über Abstürze hinweg speichern muss. Wenn ich allerdings mal @steem-chain-info nehme, muss die ganze Zeit über gezählt werden und die Werte dürfen auf keinen Fall verloren gehen. Mit diesem Aufbau

from beem.blockchain import Blockchain

b = Blockchain()

def loop():
    werte = {'blocks': 0}
    for op in b.stream(opNames=['transfer']):
        werte['blocks'] += 1

if __name__ == '__main__':
    while True:
        try:
            loop()
        except Exception:
            pass  # ignorieren oder eine Fehlermeldung ausgeben

ist das nicht möglich. Mit einer kleinen Anpassung jedoch schon.

from beem.blockchain import Blockchain

b = Blockchain()
werte = {'blocks': 0}

def loop():
    global werte
    for op in b.stream(opNames=['transfer']):
        werte['blocks'] += 1

if __name__ == '__main__':
    while True:
        try:
            loop()
        except Exception:
            pass  # ignorieren oder eine Fehlermeldung ausgeben

Also werde ich jetzt alle Bots mal umschreiben und dann funktionieren sie hoffentlich wieder zuverlässig.


Anmerkung des Autors: Also hey, der Post bring wohl keine neuen Erkenntnisse, aber ich habe etwas geschrieben. Und das ist ja das, was ich will. Schreiben.
Das ist jetzt so ein bisschen wie ein Tagebucheintrag xD

Sort:  

Hello! Your post has been resteemed and upvoted by @ilovecoding because we love coding! Keep up good work! Consider upvoting this comment to support the @ilovecoding and increase your future rewards! ^_^ Steem On!

Reply !stop to disable the comment. Thanks!

!stop

Congratulations @portalmine! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You got more than 500 replies. Your next target is to reach 600 replies.

Click here to view your Board of Honor
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard:

Be ready for the next contest!
Trick or Treat - Publish your scariest halloween story and win a new badge
SteemitBoard notifications improved

Support SteemitBoard's project! Vote for its witness and get one more award!