Was ist der beste Weg ein Dictionary eines Skriptes mit anderen Skripten zu teilen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
August1328
User
Beiträge: 65
Registriert: Samstag 27. Februar 2021, 12:18

Guten Abend zusammen,

ich möchte eine Variable in Form eines einfachen Dictionary mit max. 10 Einträgen, das in einem Skript generiert und regelmäßig aktualisiert wird (2x pro Minute), mit anderen Skripten teilen, da ich diese Information / Variable dort nicht generieren kann.

Dazu habe ich ein wenig gegoggelt und ein paar Artikel gelesen wie z.B. diesen hier: https://stackoverflow.com/questions/182 ... -in-python

Es gibt diverse Möglichkeiten, die ich nachfolgend mit meinen mittelmäßigen Programmierkenntnissen mal bewertet habe - bevor ich was umsetze, dachte ich, ich frag mal hier, vielleicht hat das ja schon jemand mal gemacht oder ggf. denke ich mal wieder zu kompliziert.

Also...
  • In Datei speichern und von dort lesen: Kann man machen und funktioniert, sind aber viele Schreib-/Lesevorgänge auf der Festplatte und finde ich "unschön", obwohls der SSD Platte sicher egal ist
  • Multiprocessing mit pipe: Da ich kein Multiprocessing brauche / habe, finde ich es zu aufwendig / falsch
  • Modul pickle: Wenn ich das richtig verstanden, zum Speichern von großen Objekten in einer Datei und damit nicht ganz das richtige
  • Modul mmap: Mit einem Arbeitsspeicher verknüpftes Lesen/Schreiben einer Datei. Hm, irgendwie auch nicht ganz, oder?
  • Modul pymemcache: Speichert Werte in virtuellen Servern, recht einfach umzusetzen
  • Modul pylibmc: Ein Wrapper für memcached, auch recht einfach umzusetzen

Mir gefällt pymemcache am Besten, ein einfaches Code-Beispiel dazu sieht so aus:

Code: Alles auswählen

import memcache
shared = memcache.Client(['127.0.0.1:11211'], debug=0)

shared.set('Value', 'Hello')

print shared.get('Value')
Wie ist Eure Meinung oder auch Erfahrung hierzu?

Grüße, Andy
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@August1328: Ich würde wahrscheinlich einfach einen Webserver daraus machen wo sich andere Programme das als JSON abholen können.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum hast Du mehrere Skripte? Normalerweise versucht man das zu vermeiden, weil es alles komplizierter macht.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du die Variable in verschiedenen Prozessen haben willst, widerspricht das der Aussage, multiprocessing braucht’s nicht. Und das wäre auch die simpelste Lösung, weil es für diesen Fall geschaffen wurde.
August1328
User
Beiträge: 65
Registriert: Samstag 27. Februar 2021, 12:18

Noch ein paar Hintergrundinfos: Mit dem Modul ib_insync frage ich über die Schnittstelle meines Brokers Daten ab.

Das erste Skript ist ein Scanner, der Aktien nach gewissen Kriterien sucht und in einer Tabelle mit ein paar Zusatzinfos darstellt - falls es jemand interessiert, das geht mit ib.reqScannerData() und dann ib.reqMktData().

Dieser Scanner kann weitere Skripte mit

Code: Alles auswählen

system(f"start cmd /k python C:/Users/ah/bot/bot_05.py {symbol}")
starten, das ist nicht Multiprocessing, oder?

Ich nenne diese Skripte "Bots", da sie jeweils 1 Aktie analysieren, d.h. die vergangenen Kursdaten abrufen und neue Kursdaten live empfangen und verarbeiten - die Methode heißt ib.reqHistoricalData(). Der Scanner kann einen Bot auch wieder schließen, wenn z.B. das Volumen der Aktie einbricht.

Das Problem ist, daß man mit ib.reqMktData() über sog. generische Ticks einiges an Zusatzinformationen zu einem Kurs abrufen kann (https://interactivebrokers.github.io/tw ... types.html), was mit ib.reqHistoricalData() schlicht nicht vorgesehen ist.

In einer neuen Version möchte ich den Bots z.B. den sog. VWAP von ib.reqMktData() zur Verfügung stellen.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie vermutet, machst Du Dir das Leben unnötig schwer, weil Du nicht alles in ein Skript packst.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wir hatten diese ganze Diskussion schonmal. Da ist alles unnötig kompliziert. Du benutzt das Modul multiprocessing nicht, aber multiple Prozesse. Unter der Annahme, dass du die bräuchtest - tust du nicht, aber das haben wir damals schon durchgekaut - kannst du auch multiprocessing benutzen, und dann den Austausch von Daten zwischen denen geschenkt bekommen.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn dir ein Key-Value Store reicht -> Python hat welche an Bord wie dbm oder shelve. memcache oder Redis sind da eher ein Overkill für 10 Werte.

Und wenn du wirklich aus einem Python-Skript heraus ein anderes mit `os.system` (oder `subprocess`, was ja Stand der Dinge für sowas ist) startest, dann hast du zu 99% Prozent beim Programmieren was falsch gemacht, weil der Weg zu 99% halt falsch ist.

Gruß, noisefloor
August1328
User
Beiträge: 65
Registriert: Samstag 27. Februar 2021, 12:18

Guten Abend zusammen,

danke für die zahlreichen Rückmeldung! War teilweise etwas ernüchternd :lol: aber ich hab wieder dazugelernt, auch über Module wie memcached oder dbm, die man vielleicht anderweitig mal brauchen kann.

Dann werde ich das Ganze in den nächsten Tagen auf subprocess mit PIPE umschreiben.

Grüße
Andy
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

multiprocessing & Pipe wäre zielführender.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum immer noch subprocess?
Liest Du eigentlich, dass das hier alle für eine schlechte Idee halten?
Ich würde ja sagen, dass multiprocessing ziemlich überdimensioniert ist, und man wahrscheinlich nichtmal Threads braucht.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dem stimme ich zu, aber es scheinen entgegen jeder Argumente Prozesse sein zu müssen 🤷‍♂️
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Warum sind es eigentlich so häufig Leute, die glauben, sie könnte mit Programmen an der Börse reich werden, die stur einer Fehlannahme folgen und sich davon nicht abhalten lassen? In meinen Augen gibt es da eine gewisse Parallelität. Und die Fraktion der Cryptowährungs- und NFT-Liebhaber.
August1328
User
Beiträge: 65
Registriert: Samstag 27. Februar 2021, 12:18

doch, hab´s kapiert... lese gerade die verschiedenen Dokus und stehe, wie öfter bei nem neuen Thema, erst mal wie der Ochs vorm Berg, aber das wird schon mit der Zeit, ich will mir das selber erarbeiten und kapieren.

Danke für Eure Hartnäckigkeit :wink:
Antworten