So starten Sie AWS Batch über die Python-Client-App

Überblick

Letztes Mal Legen Sie fest, dass von der Clientanwendung aus gestartet wird, indem der vom erstellten Lambda ausgeführte Prozess umgeleitet wird.

Vorbereitung

Vorbereitung der Client-Anwendung

Es ist lang und daher gefaltet
from utils.logger import LoggerObj
import sys
import os
import requests
import tkinter
from datetime import datetime
import boto3
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
from tkinter import ttk
from tkinter.ttk import *
import threading
from tkinter import messagebox
from tkinter import filedialog
from tkinter import Button,ttk,StringVar
from selenium import webdriver
from functools import partial 


root= tkinter.Tk()
EXECUTE_LIST=['Prozess A.','Prozess B.','Prozess C.']
class PythonGui():

    def __init__(self):
        self.lock = threading.Lock()

        self.inputText=StringVar()

        self.progressMsg=StringVar()
        self.progressBar=None
        self.progressMsgBox=None

        self.progressStatusBar=None
        self.progressValue=None

    def init(self):
        pass
    
    #Bedienung nach Ersteinstellung
    def preparation(self,logfilename):
        self._executer=partial(self.execute,logfilename)

    def progressSequence(self,msg,sequenceValue=0):
        self.progressMsg.set(msg)
        self.progressValue=self.progressValue+sequenceValue
        self.progressStatusBar.configure(value=self.progressValue)

    def quite(self):
        if messagebox.askokcancel('Bestätigung des Endes','Möchten Sie den Prozess beenden?'):
            if self.lock.acquire(blocking=FALSE):
                pass
            else:
                messagebox.showinfo('Bestätigung des Endes','Bitte schließen Sie den Browser, während der Browser ausgeführt wird.')
            self.lock.release()
            root.quit()
        else:
            pass

    def execute(self,logfilename):

        logObj=LoggerObj()
        log=logObj.createLog(logfilename)
        log.info('Starten Sie die Verarbeitung')

        executeType=EXECUTE_LIST.index(self.combo.get())
        nowDate=datetime.now().strftime('%Y%m%d%H%M%S')
        inputVal=self.inputText.get()

        client = boto3.client('batch')

        JOB_NAME = 'pandas-envtest'
        JOB_QUEUE = "arn:aws:batch:ap-northeast-1:XXXXXXXXXX:job-queue/first-run-job-queue"
        JOB_DEFINITION = "arn:aws:batch:ap-northeast-1:XXXXXXXXXX:job-definition/pandas-envtest:1"

        response = client.submit_job(
            jobName = JOB_NAME,
            jobQueue = JOB_QUEUE,
            jobDefinition = JOB_DEFINITION,
        containerOverrides={
            'command': [
                inputVal,nowDate,str(executeType)
            ],
            'environment': [
                {
                    'name': 'TEST',
                    'value': 'abcd'
                }
            ]
        }
        )
        self.progressMsgBox.after(10,self.progressSequence('Die Verarbeitung ist im Gange',sequenceValue=50))
        root.update_idletasks()

        self.progressBar.stop()
        self.progressMsgBox.after(10,self.progressSequence('Registrierungsprozess abgeschlossen',sequenceValue=50))
        root.update_idletasks()

        log.info('Verarbeitung beenden')
        self.lock.release()
    

    def doExecute(self):
        if self.lock.acquire(blocking=FALSE):
            if messagebox.askokcancel('Bestätigung vor der Ausführung','Möchten Sie den Vorgang ausführen?'):
                self.progressValue=0
                self.progressStatusBar.configure(value=self.progressValue)
                self.progressBar.configure(maximum=10,value=0)
                self.progressBar.start(100)
                th = threading.Thread(target=self._executer)
                th.start()
            else:
                self.lock.release()
        else:
            messagebox.showwarning('Error','Die Verarbeitung ist im Gange')


    def progressMsgSet(self,msg):
        self.progressMsg.set(msg)

    def progressStart(self):
        self.progressBar.start(100)

        


    def main(self):
        root.title("Python GUI")

        content = ttk.Frame(root)
        frame = ttk.Frame(content,  relief="sunken", width=300, height=500)
        title = ttk.Label(content, text="Python GUI")

        content.grid(column=0, row=0)


        title.grid(column=0, row=0, columnspan=4)

        fileLabel=ttk.Label(content,text="Bearbeitungsnummer")
        pulldownLabel=ttk.Label(content,text="Inhalte verarbeiten")

        fileInput=ttk.Entry(content,textvariable=self.inputText,width=23)
        
        self.inputText.set('A01')
        #Kombinationsfeld erstellen(Als Wurzel platziert,Listenwerte können nicht bearbeitet werden(readonly)Einstellen)
        self.combo = ttk.Combobox(content, state='readonly')
        #Stellen Sie den Wert der Liste ein
        self.combo["values"] = tuple(EXECUTE_LIST)
        #Der Standardwert ist die Nahrungsmittelkosten(index=0)Einstellen
        self.combo.current(0)


        labelStyle=ttk.Style()
        labelStyle.configure('PL.TLabel',font=('Helvetica',10,'bold'),background='white',foreground='red')
        self.progressMsgBox=ttk.Label(content,textvariable=self.progressMsg,width=70,style='PL.TLabel')
        self.progressMsg.set('Warten auf Bearbeitung')

        self.progressBar=ttk.Progressbar(content,orient=HORIZONTAL,length=140,mode='indeterminate')
        self.progressBar.configure(maximum=10,value=0)

        self.progressStatusBar=ttk.Progressbar(content,orient=HORIZONTAL,length=140,mode='determinate')


         
        executeButton=ttk.Button(content,text='Lauf',command=self.doExecute)
        quiteButton=ttk.Button(content,text='Ende',command=self.quite)

        fileLabel.grid(column=1, row=1,sticky='w')
        fileInput.grid(column=2, row=1)
        pulldownLabel.grid(column=1, row=2,sticky='w')

        #Platzierung des Kombinationsfeldes
        self.combo.grid(column=2, row=2)
        executeButton.grid(column=1, row=6,columnspan=2,sticky='we')
        quiteButton.grid(column=1, row=12,columnspan=2,sticky='we')




        root.mainloop()



if  __name__ == "__main__":
    pythonGui=PythonGui()
    pythonGui.preparation('log')
    pythonGui.main()

Recommended Posts

So starten Sie AWS Batch über die Python-Client-App
So öffnen Sie einen Webbrowser über Python
So generieren Sie ein Python-Objekt aus JSON
Schritte von der Installation von Python 3 bis zur Erstellung einer Django-App
[Python] So rufen Sie eine Funktion von c aus Python auf (ctypes edition)
So schneiden Sie ein Block-Multiple-Array aus einem Multiple-Array in Python
So führen Sie ein Python-Programm in einem Shell-Skript aus
So starten Sie den Explorer über die WSL
So greifen Sie über Python auf Wikipedia zu
Starten eines mit Jupyter Notebook erstellten Python-Programms
Übergeben von Argumenten an Python-Skripte in SPSS Modeler Batch
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
[Python] So erhalten und ändern Sie Zeilen / Spalten / Werte aus einer Tabelle.
So entfernen Sie Duplikate aus einer Python-Liste unter Beibehaltung der Reihenfolge.
[ROS2] So spielen Sie eine Bag-Datei mit Start im Python-Format ab
So erstellen Sie einen Klon aus Github
[Python] Wie man eine Klasse iterierbar macht
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
[Python] So invertieren Sie eine Zeichenfolge
Wie bekomme ich Stacktrace in Python?
Zugriff auf RDS von Lambda (Python)
Starten Sie eine Flask-App in Python Anywhere
So erstellen Sie ein Repository aus Medien
Bearbeiten Sie BigQuery-Tabellen von einem Python-Client aus
So führen Sie Maya Python-Skripte aus
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)
Senden Sie eine Nachricht von Slack an einen Python-Server
Bearbeiten Sie Excel in Python, um eine Pivot-Tabelle zu erstellen
Lesen einer CSV-Datei mit Python 2/3
So löschen Sie einen Taple in einer Liste (Python)
[Version 2020] So installieren Sie Python3 auf EC2 von AWS
Einbetten von Variablen in Python-Strings
So erstellen Sie ein Funktionsobjekt aus einer Zeichenfolge
Studie aus Python Hour7: Verwendung von Klassen
So entwickeln Sie eine Cart-App mit Django
So erstellen Sie eine JSON-Datei in Python
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
So fügen Sie einen Suchpfad für Python-Module hinzu
Wie man gut mit Linux-Befehlen aus Python umgeht
So extrahieren Sie den Koeffizienten aus der Minutenformel
So benachrichtigen Sie Discord-Kanäle in Python
[AWS / Lambda] Laden einer externen Python-Bibliothek
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
[Python] Wie zeichnet man mit Matplotlib ein Histogramm?
Ich habe eine Bibliothek zum Betreiben des AWS CloudFormation-Stacks über CUI (Python Fabric) erstellt.
[Python] So löschen Sie einfach einen untergeordneten Prozess, der durch Multiprozess gestartet wurde, von einem anderen Prozess
Erstellen Sie Einstellungen in Terraform, um Nachrichten von AWS Lambda Python3.8 an Slack zu senden
So installieren Sie Python
Änderungen von Python 2 zu Python 3.0
So installieren Sie Python
[Python] Wie zeichnet man mit Matplotlib ein Liniendiagramm?
So richten Sie eine Python-Umgebung mit pyenv ein
Terraform konfiguriert, um AWS Lambda von Amazon SQS aus zu starten
App-Entwicklung zum Twittern in Python aus Visual Studio 2017
[Python] So erweitern Sie Variablen in einer Zeichenfolge
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3