Packer pausieren lassen

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
Michaela81
User
Beiträge: 18
Registriert: Samstag 5. September 2020, 18:47

Ich möchte nicht erst Monatelang die theoretischen Grundlagen von Python lernen ohne etwas praktisch anzuwenden.
Ich habe auch nicht vor Python irgendwann beruflich zu nutzen, sondern einfach nur mal schnell eine Hilfe für meinen privaten Alltag zu scripten
(Redet man bei Python von scripten oder coden, bzw. Scripts oder Programmen ? Irgendwie kommt mir das vor als wäre es etwas von beiden)
Das beinhaltet jedenfalls das ich immer nur die Dinge erlernen möchte die ich gerade brauche. Und zukünftig vielleicht nie wieder brauchen werde.
Ein weiteres Handicap, mein Englisch ist nicht gut, das lesen und verstehen englischer Beschreibungen dauert sehr lange, danach stelle ich meist fest das mein aktuelles Problem damit nicht gelöst wird ..
Deswegen wäre es hilfreich vorher zu wissen wo ich die passenden Infos finde, oder ob es überhaupt passende Lösungen gibt.
Derzeit stelle ich mir die Frage, ist es möglich einen Thread in dem ein Programm läuft so zu pausieren das es alle laufenden Aktivitäten anhält ?
In meinem Fall schwebt mir eine Art Archivprogramm vor mit GUI vor. Die GUI soll ansprechbar bleiben, also sollte das in einem solchen Programm wohl unumgängliche Packen in einem eigenen Thread im Hintergrund laufen.
Da sich die Packprogramme selber oft nicht pausieren lassen, Ist es möglich diesen Thread während des Packens so zu pausieren und wieder fortzusetzten, das er praktisch keine Rechenzeit bekommt ?
Lässt sich beispielsweise threading.lock dazu verwenden um das packen von der GUI aus (TKinter) zu pausieren und wieder zu starten ?
Oder gibt es andere Möglichkeiten ein Packprogramm vorübergehend pausieren zu lassen.

Danke für die Hilfe
Benutzeravatar
__blackjack__
User
Beiträge: 13927
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Michaela81: Die Frage kann man ohne konkreten Code schlecht beantworten. Threads von ”aussen” anhalten geht in der Regel nur kooperativ, das heisst der Thread selbst muss regelmässig prüfen ob er pausieren soll und das dann tun. Dabei könnte er dann auf ein `threading.Event` zum weiterlaufen warten was keine Rechenzeit kostet.

Falls externe Packprogramme verwendet werden und man die anhalten möchte, dann geht das zumindest unter Unix-ähnlichen Systemen mit den Signalen STOP und CONTINUE.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Michaela81
User
Beiträge: 18
Registriert: Samstag 5. September 2020, 18:47

Ich danke dir für die Antwort. Ein wenig hilft sie mir schon weiter, auch wenn ich eher etwas Python internes verwenden würde, nichts OS-spezifisches. Den dann bräuchte ich auch eine gleichbürtige Möglichkeit für Windows.
Nein, ich habe noch keinen Code dafür vorzuweisen. Es macht keinen Sinn etwas anzufangen, wenn man mit seinem bisherigen, bescheidenden Wissen nicht vorher überlegt ob man Lösungen zustande bringt, und bei diesem Teilproblem zweifle ich eben daran.
Als Grundprogramm dachte ich erstmal eine später erweiterbare, einfache Möglichkeit in TKinter. Ein Startbutton zum Packen starten, ein Pausebutton zum pausieren (falls man die Rechenleistung gerade woanders benötigt), und einen zum Abbrechen.
Da ich hässlich finde wenn die GUI während des (ent)packes einfriert, sollte das in einem eigenen Thread passieren. Dann könnte man währenddessen auch beispielsweise weitere Daten zur Verarbeitung vorbereiten.
Da aber das Packprogramm während seiner Tätigkeit nicht mit Befehlen ansprechbar ist (muss mal guggen ob das vielleicht mit Signalen möglich sein könnte, geht aber noch etwas über meinen Horizont), wollte ich wissen ob man vielleicht die Rechenzeit des Threads einschränken, vielleicht sogar den Thread pausieren lassen könnte. So wie du schreibst ist das nicht, oder nur umständlich möglich.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du zb zipfile benutzt, kannst du natürlich selbst vor dem hinzufügen einer weiteren Datei prüfen, ob es jetzt weitergehen soll, oder Pause angesagt ist. Innerhalb eines von add_file & Co hat’s du aber keine Eingriffsmöglichkeit. Zugeeilte Rechenleistung zu beeinflussen ginge wenn nur OS-spezifisch, zb kann man “nicen” unter Unix. Ob das nun aber wirklich signifikant etwas bringt, steht auf einem anderen Blatt.
Michaela81
User
Beiträge: 18
Registriert: Samstag 5. September 2020, 18:47

Danke.
Damit sind wohl alle meine Fragen geklärt.
Antworten