Comment lancer AWS Batch à partir de l'application cliente Python

Aperçu

Dernière fois Configuré pour démarrer à partir de l'application cliente en détournant le processus exécuté du Lambda créé.

Préparation

Préparation de la demande client

C'est long donc c'est plié
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=['Processus A','Processus B','Processus 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
    
    #Fonctionnement après le réglage initial
    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('Confirmation de fin','Voulez-vous terminer le processus?'):
            if self.lock.acquire(blocking=FALSE):
                pass
            else:
                messagebox.showinfo('Confirmation de fin','Veuillez fermer le navigateur pendant que le navigateur est en cours d'exécution.')
            self.lock.release()
            root.quit()
        else:
            pass

    def execute(self,logfilename):

        logObj=LoggerObj()
        log=logObj.createLog(logfilename)
        log.info('Commencer le traitement')

        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('Le traitement est en cours',sequenceValue=50))
        root.update_idletasks()

        self.progressBar.stop()
        self.progressMsgBox.after(10,self.progressSequence('Processus d'inscription terminé',sequenceValue=50))
        root.update_idletasks()

        log.info('Sortie de traitement')
        self.lock.release()
    

    def doExecute(self):
        if self.lock.acquire(blocking=FALSE):
            if messagebox.askokcancel('Confirmation avant exécution','Voulez-vous exécuter le processus?'):
                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('Erreur','Le traitement est en cours')


    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="Numéro de traitement")
        pulldownLabel=ttk.Label(content,text="Traitement du contenu")

        fileInput=ttk.Entry(content,textvariable=self.inputText,width=23)
        
        self.inputText.set('A01')
        #Créer une zone de liste déroulante(Placé en tant que root,Les valeurs de liste ne peuvent pas être modifiées(readonly)Mis à)
        self.combo = ttk.Combobox(content, state='readonly')
        #Définir la valeur de la liste
        self.combo["values"] = tuple(EXECUTE_LIST)
        #La valeur par défaut est les dépenses alimentaires(index=0)Mis à
        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('En attente de traitement')

        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='Courir',command=self.doExecute)
        quiteButton=ttk.Button(content,text='Fin',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')

        #Placement de la liste déroulante
        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

Comment lancer AWS Batch à partir de l'application cliente Python
Comment ouvrir un navigateur Web à partir de python
Comment générer un objet Python à partir de JSON
Étapes de l'installation de Python 3 à la création d'une application Django
[Python] Comment appeler une fonction de c depuis python (édition ctypes)
Comment découper un bloc de plusieurs tableaux à partir d'un multiple en Python
Comment exécuter un programme Python à partir d'un script shell
Comment lancer Explorer à partir de WSL
Comment accéder à wikipedia depuis python
Comment démarrer par lots un programme Python créé avec le notebook Jupyter
Comment passer des arguments à un script Python dans SPSS Modeler Batch
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
[Python] Comment obtenir et modifier les lignes / colonnes / valeurs d'une table.
Comment supprimer les doublons d'une liste Python tout en préservant l'ordre.
[ROS2] Comment lire un fichier bag avec le lancement au format python
Comment créer un clone depuis Github
[Python] Comment rendre une classe itérable
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
[Python] Comment inverser une chaîne de caractères
Comment obtenir stacktrace en python
Comment accéder à RDS depuis Lambda (python)
Lancer une application Flask dans Python Anywhere
Comment créer un référentiel à partir d'un média
Manipuler des tables BigQuery à partir d'un client Python
Comment exécuter des scripts Maya Python
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)
Envoyer un message de Slack à un serveur Python
Modifier Excel à partir de Python pour créer un tableau croisé dynamique
Comment lire un fichier CSV avec Python 2/3
Comment effacer un taple dans une liste (Python)
[Version 2020] Comment installer Python3 sur EC2 d'AWS
Comment incorporer des variables dans des chaînes python
Comment créer un objet fonction à partir d'une chaîne
Étude de Python Hour7: Comment utiliser les classes
Comment développer une application de panier avec Django
Comment créer un fichier JSON en Python
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Comment ajouter un chemin de recherche de module Python
Comment bien gérer les commandes Linux à partir de Python
Comment extraire le coefficient de la formule minute
Comment notifier les canaux Discord en Python
[AWS / Lambda] Comment charger une bibliothèque externe Python
Procédure de création d'application multi-plateforme avec kivy
[Python] Comment dessiner un histogramme avec Matplotlib
J'ai créé une bibliothèque pour faire fonctionner la pile AWS CloudFormation à partir de CUI (Python Fabric)
[Python] Comment supprimer facilement un processus enfant lancé par multiprocessus à partir d'un autre processus
Créez des paramètres dans terraform pour envoyer des messages depuis AWS Lambda Python3.8 vers Slack
Comment installer Python
Changements de Python 2 à Python 3.0
Comment installer python
[Python] Comment dessiner un graphique linéaire avec Matplotlib
Comment configurer un environnement Python à l'aide de pyenv
Terraform configuré pour lancer AWS Lambda à partir d'Amazon SQS
Développement d'applications pour tweeter en Python à partir de Visual Studio 2017
[Python] Comment développer des variables dans une chaîne de caractères
Comment écrire un type liste / dictionnaire de Python3