running script mehrmals gleichzeitig in python 2.7
Hallo ich versuche ein Skript ausgeführt wird, mehrere Male, möchte aber zu diesem Ort, zur gleichen Zeit von dem, was ich verstanden, dass ich Teilprozess und threading zusammen
jedoch wenn ich es ausführen, es sieht immer noch wie es wird sequenziell ausgeführt werden, kann mir jemand helfen, so dass ich bekommen kann, um den gleichen script über und über, aber in der gleichen Zeit?
ist es in der Tat arbeiten und nur sehr langsam?
edit vergaß das Letzte Stück der code jetzt unten
hier ist was ich bisher
import os
import datetime
import threading
from subprocess import Popen
today = datetime.date.today()
os.makedirs("C:/newscript_image/" + str(today))
class myThread(threading.Thread):
def run(self):
for filename in os.listdir('./newscript/'):
if '.htm' in filename:
name = filename.strip('.htm')
dbfolder = "C:/newscript/db/" + name
os.makedirs(dbfolder)
Popen("python.exe C:/execution.py" + ' ' + filename + ' ' + name + ' ' + str(today) + ' ' + dbfolder)
myThread().start()
- Wie "gleichzeitig" müssen Sie sein? Teilprozess gerne ausführen Prozesse asynchron.
- Ich glaube, Sie könnten nicht alle Codes die es gibt. Das erzeugt eine thread-Klasse, aber nicht wirklich führen Sie den Faden. Es scheint auch, wie könnte man nennen, was auch immer Funktion, die Sie brauchen execution.py direkt anstelle von aufrufen, es durch ein neues python.exe Dolmetscher.
- danke für den Hinweis, ich habe tatsächlich die myThread.beginnen Sie an der Unterseite von meinem code nur vergessen, es aufzunehmen, so sollte mein Gewindeschneiden erfolgt in der execution.py Skript, gerade jetzt, das script ist auch nur mit einem anderen Skript mit einigen Parametern wie script1.py param1 dann die nächste Zeile wird script1.py param2 und so weiter
Du musst angemeldet sein, um einen Kommentar abzugeben.
Persönlich verwende ich
multiprocessing
. Ich würde eine Funktion schreiben, die nimmt einen Dateinamen ein, und tut, was die wichtigsten Eingeweide desexecution
hat (wahrscheinlich durch den Importexecution
und läuft einige Funktion innerhalb es):Popen
- code anstelle vonexecution.run_main_with_args
. Die Kernidee dieser Antwort ist die multiprocessing-pool der Arbeitskräfte und der Zuordnung der Liste der Dateien auf, so dass anstatt 1 zusätzlichen thread, der die Verarbeitung, Sie haben einen pool von Arbeitskräften zu tun, die Verarbeitung. mgilson Lösung verhindert nur, dass der overhead von Popen und den Aufruf eines neuen python.exe interpreter Weg.Lief einige schnelle tests. Den Rahmen des Skripts:
Ich dann besiedelten die "newscript" - Ordner mit einem Haufen ".htm" - Dateien vor dem ausführen des Skripts vor.
Wo "busy.sh" im Grunde ist:
Den code, den Sie haben, tatsächlich das Feuer aus mehreren Prozessen, die im hintergrund laufen. Ich Tat dies mit einem newscript Ordner mit 200 Dateien und ich sehe 200 Prozessen, die alle im hintergrund laufen.
Merkten Sie an, dass Sie wollen, dass Sie laufen alle im hintergrund zur gleichen Zeit.
Für die meisten Teil, parallele Prozesse die im hintergrund laufen, "in etwa" parallel, aber aufgrund der Art und Weise, dass die meisten gängigen Betriebssysteme eingerichtet sind, "parallel" ist mehr wie "fast parallel" oder mehr gemeinhin als asynchron. Wenn man sich die Zugriffszeiten SEHR eng, die verschiedenen Prozesse hervorgebracht, die in dieser Weise wird jeder eine Wendung nehmen, aber Sie werden nie alle tun etwas zur gleichen Zeit.
Ist etwas bewusst zu sein. Vor allem, da Sie den Zugriff auf Dateien kontrolliert durch das Betriebssystem und die zugrundeliegende Dateisystem.
Für das, was Sie zu tun versuchen: Prozess-eine Reihe von Dateien eingehend, wie Sie es tun, ist im Grunde Laich aus-ein Prozess, um die Datei zu verarbeiten, die im hintergrund für jede Datei, die angezeigt wird.
Es gibt ein paar Probleme mit der Logik vorgestellt:
Vorschlag:
Statt erzeugen von jobs, Sie wäre besser dran, die Einnahme der Verarbeitung der Dateien in der code, den Sie werden laichen und drehen es in eine Python-Funktion. Re-schreiben Sie Ihren code wie eine daemonisierte Prozess, der beobachtet, wie die Ordner und behält den überblick darüber, wie viele Prozesse erzeugt, so dass die Ebene von hintergrund-Prozesse, die übergabe-Datei-Konvertierung ist gelungen.
Beim verarbeiten der Datei, die Sie würde spin-off ein Python-thread zu behandeln, das wäre eine leichtere alternative zum laichen aus einem OS-level-thread.
Ein wenig Ausarbeitung mgilson Antwort:
Sagen wir, wir haben einen Ordner beispiel1.
Innerhalb beispiel1 wir haben zwei python-Skripte:
execution.py, und main.py
Den Inhalt execution.py sieht wie folgt aus:
Auch der Inhalt des main.py wie folgt Aussehen:
Dann, wenn wir diese main.py wird, erstellt die erforderlichen Dateien in die gewünschten Verzeichnisse in parallel Weg!