mich beschäftigt erneut ein Projekt, bei welchem ich nicht so recht weiter weiß.
Da ich noch recht grün hinter den Ohren bin, was Python und die fülle an Möglichkeiten angeht, such ich hier erneut nach Ideen und Lösungen.
Zum Projekt:
Ich habe zwei Python-Scripte, welche in einer Endlosschleife Daten von einem Websocket-Server erhalten.
Das eine Script erhält Finanzdaten von einer Börse und das andere Script erhält Accountbezogene Informationen Aktionen welche ich auf der Börse durchführe. Diese Information zu meinem Account, werden nur gesendet wenn eine Aktion ausgeführt wurde, anderst bei den Finanzdaten, welche alle ~~300ms empfangen werden.
Ich möchte nun vom Script_A(Finanzdaten) an unterschiedlichsten Zeitpunkten in der Laufzeit, Daten an das Script_B(Accountbezogene Infos) senden.
Das Script_B weiß nicht, wann die Zeitpunkte im Script_A sind, denn diese Zeitpunkte werden aus den Finanzdaten errechnet und sind nicht vorhersehbar.
Script_A sollte durch das senden der Daten zu Script_B nicht neu gestartet werden oder zu lange pausieren. 500ms bis maximal 1000ms sind in Ordnung.
Ich hab mich die letzten Tage hier im Forum und im Netz etwas recherchiert und bin dabei immer wieder auf Pipes oder Queues des Modules Multiprocessing gestoßen.
https://stackoverflow.com/questions/438 ... on-scripts oder https://stackoverflow.com/questions/846 ... 9#58015119
https://docs.python.org/3/library/multi ... -processes
Ich versteh jedoch nicht wie ich nun das ganze auf meine Wünsche anpassen kann, da ich keine Erklärung gefunden habe, welchen Anfängern weiterhilft.
Mein einziger Versuch war bisher, den folgenden Code(Code ist aus dem Netz kopiert) angepasst in meinen Code einzubauen. Vergebens....
Code: Alles auswählen
# Script_A
from multiprocessing import Process,Queue,Pipe
from Script_B import f
if __name__ == '__main__':
parent_conn,child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
print(parent_conn.recv()) # prints "Hello"
Code: Alles auswählen
# Script_B
from multiprocessing import Process,Pipe
def f(child_conn):
msg = "Hello"
child_conn.send(msg)
child_conn.close()
Mein Basis-Code sieht wie folgt aus:
Code: Alles auswählen
"""
SIGNAL-SCRIPT (SCRIPT_A)
"""
import websocket
import json
def on_message(wsapp, message):
stream_data = json.loads(message)
print(stream_data)
if stream_data['k']['x']:
# Send information to USERDATA-STREAM-SCRIPT (SCRIPT_B)
pass
wsapp = websocket.WebSocketApp(url="wss://fstream.binance.com/ws/adausdt_perpetual@continuousKline_1m")
wsapp.last_ping_tm = 32
wsapp.last_pong_tm = 1
while True:
try:
wsapp.run_forever(ping_interval=40, ping_timeout=30)
except Exception as e:
print(e)
Der Code für Script_B ist genau gleich, lediglich die URL ist eine andere.
Die Verarbeitung in Script_B ist soll hier nicht Thema sein.
Vielen herzlichen Dank, falls ihr es bis hier her gelesen habt und mir dabei helfen wollt.
Grüße
Christian