Wenn Steemit-Bots abstürzen... Meine Lösung!
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
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) :
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: