Dernière fois Configuré pour démarrer à partir de l'application cliente en détournant le processus exécuté du Lambda créé.
ʻaws_secret_access_key
Default region
.pyinstaller
avec la commande suivante.
pip install pyinstaller
XXXXXXXXXX
définit l'ID de compte AWS.command
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()
Le contenu du traitement est le suivant.
Une fonction appelée lors de l'exécution. Le processus de création d'un écran est décrit ici.
La valeur initiale de la zone de texte et le contenu de la zone de liste déroulante sont également créés.
Ce processus est appelé lorsque le bouton d'exécution est enfoncé.
Le fil est utilisé pour empêcher le double démarrage.
Il s'agit du processus qui appelle réellement AWS Batch.
Si vous recevez ʻaws_access_key_id ʻaws_secret_access_key
`` Default region` lorsque vous appelez boto3.client, vous n'avez pas besoin d'installer AWS CLI.
Vous pouvez le vérifier en exécutant la source, mais si vous souhaitez l'utiliser comme application client, créez un exe avec la commande suivante. Si le nom du fichier source est pythonGui.py
, ce sera comme suit.
Lorsque le fichier exe est exécuté, il démarre en tant qu'application client comme indiqué ci-dessous.
Le résultat de l'exécution d'AWS Batch sera le même que la dernière fois, il est donc omis.