Seite 1 von 1
Funktion im Hintergrund ausführen
Verfasst: Samstag 20. März 2021, 10:56
von egon11
Hallo, kann man eine Funktion auch im Hintergrund ausführen lassen und so dass das eigentliche Programm weiter arbeiten kann?
Hier mal ein Beispiel:
Code: Alles auswählen
import time
def test():
print("hello world")
time.sleep(3)
for i in e:
if i == x:
test()
hier weitere anweisung wo parallel die Funktion
ausgeführt wird
Also sollen die Anweisungen weiter laufen unabhängig von der Funktion.
Gruß
Re: Funktion im Hintergrund ausführen
Verfasst: Samstag 20. März 2021, 11:01
von nezzcarth
Das ist m. M. n. eine Architekturfrage, die sich am Besten am ganz konkreten Anwendungsfall beantworten lässt. So abstrakt ist das eher schwierig.
Re: Funktion im Hintergrund ausführen
Verfasst: Samstag 20. März 2021, 11:07
von egon11
Am einfachsten wäre doch ein anderes Programm zu starten oder?
Ich dachte es gibt eine generelle Variante wie man Programme isoliert ausführen kann.
Beim googeln habe ich leider auch nichts brauchbares gefunden.
Re: Funktion im Hintergrund ausführen
Verfasst: Samstag 20. März 2021, 11:08
von Sirius3
Was für eine Funktion möchtest du denn im Hintergrund ausführen? Es gibt etliche Möglichkeiten, weil es keiner allgemeingültige Antwort auf die Frage gibt.
Re: Funktion im Hintergrund ausführen
Verfasst: Samstag 20. März 2021, 11:12
von egon11
Die soll etwas in über das Internet schicken (z.B. FTP), falls das die Adresse mal schwer zu erreichen ist, dauert es ja ein bisschen, aber es soll ja im Programm weiter gehen.
Ein anderes Programm zu starten wäre keine gute Idee?
Und dann gibt es ja noch asyncio.
Re: Funktion im Hintergrund ausführen
Verfasst: Samstag 20. März 2021, 11:16
von Sirius3
Genau, wenn man viele Internetverbindungen gleichzeitig hat, ist async eine Lösung.
Re: Funktion im Hintergrund ausführen
Verfasst: Samstag 20. März 2021, 11:29
von egon11
OK. und ein anderes Programm ausführen lassen?
Re: Funktion im Hintergrund ausführen
Verfasst: Samstag 20. März 2021, 11:43
von egon11
also mit async würde das so aussehen:
Code: Alles auswählen
import time
import asyncio
async def test1():
print("test 1")
time.sleep(5)
print("test 1 ist fertig")
async def test2():
print("test 2")
async def main():
a = test1()
b = test2()
await asyncio.wait([a, b])
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
Re: Funktion im Hintergrund ausführen
Verfasst: Samstag 20. März 2021, 12:24
von egon11
egon11 hat geschrieben: Samstag 20. März 2021, 11:43
also mit async würde das so aussehen:
Code: Alles auswählen
import time
import asyncio
async def test1():
print("test 1")
time.sleep(5)
print("test 1 ist fertig")
async def test2():
print("test 2")
async def main():
a = test1()
b = test2()
await asyncio.wait([a, b])
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
Edit: Ich habe noch etwas einfacheres gefunden:
Code: Alles auswählen
import time
from concurrent import futures
def test1():
print("test 1")
time.sleep(5)
print("test 1 ist fertig")
def test2():
print("test 2")
e = futures.ThreadPoolExecutor()
e.submit(test1)
e.submit(test2)
e.shutdown()
Würde doch auch gehen oder?
Re: Funktion im Hintergrund ausführen
Verfasst: Samstag 20. März 2021, 17:57
von Sirius3
Das ist halt jetzt was komplett anderes. Und wie schon geschrieben, kann man an so dummy-Beispielen nicht wirklich erklären, was die beste Variante wäre.
Re: Funktion im Hintergrund ausführen
Verfasst: Samstag 20. März 2021, 18:16
von __blackjack__
Wobei wenn es ums hochladen per FTP geht so ein `ThreadPoolExecutor` schon gehen würde. Mit einer Poolgrösse die angibt wie viele Uploads maximal parallel laufen dürfen.
Re: Funktion im Hintergrund ausführen
Verfasst: Sonntag 21. März 2021, 15:53
von egon11
Mir geht es eigentlich nur darum, dass ich 2 Funktionen gleichzeitig ausführen kann. Ich dachte da gibt es eine generelle Lösung.
Aber wenn nichts gegen "concurrent" würde ich das nehmen.