Ich bin Neuling mit SQLAlchemy und ich arbeite auf einem komplexen ETL-Prozess, so habe ich die folgenden vereinfachten Code:Handhabung scoped_session über mehrere Module mit SQLAlchemy
module1.py
class Foo:
def foo_method(self):
# doing stuff with database
module2.py
class Bar:
def bar_method(self):
# doing stuff with database
main_script.py
from module1 import Foo
from module2 import Bar
def run():
with Pool(processes = num_workers) as pool:
responses = [pool.apply_async(some_func, (param)) for param in params]
for response in responses:
response.get()
def some_func(param):
engine = create_engine(connection_string, echo=True)
Session = scoped_session(sessionmaker(bind=engine))
session = Session()
# Start doing some stuff with database
foo = Foo()
foo.foo_method()
bar = Bar()
bar.bar_method()
So habe ich einen Pool mit Worker-Prozess. Wenn ich main_script.run()
aufrufen, erstellt jeder Worker eine Datenbanksitzung in some_func
. Meine Frage ist, wie kann ich die gleiche Sitzung für jeden Arbeiter in Modul1 und Modul2 verwenden, ohne die Sitzung durch param zu jeder Methode zu übergeben? Sollte ich die folgenden Zeilen in jedem Modul/Datei hinzufügen?
Hallo @univerio, Danke für deine Antwort. Ich werde es versuchen, aber hast du einen besseren Ansatz, um mich vorzuschlagen? Ich werde es wirklich schätzen –
@ Overflow012 Nicht sicher, was Sie fragen. Dies ist der Standardansatz. Funktioniert das nicht für dich? – univerio