Dans Article précédent, j'ai créé un exe qui génère un .png à partir de l'environnement d'exécution non Python Windows pour le graphique de Matplotlib + Seaborn en Python. Cependant, comme le temps d'exécution est long (4 secondes), j'ai démarré .exe à l'avance et l'ai créé avec la politique d'accepter la communication entre les processus.
L'amélioration attendue est 1.Le temps de surcharge est réduit car l'importation est omise. 2. Puisqu'il s'agit d'une communication inter-processus, elle peut être échangée directement avec des données BYTE plutôt que sous forme de fichier. → Mais d'abord, ne faites que celui en 1.
Créez une communication inter-processus en vous référant à cet article. En fin de compte, je voudrais envoyer et recevoir la transmission de données et la réponse de données directement avec BYTE, mais d'abord je ne ferai que le déclencheur d'un autre processus.
La politique est d'arrêter l'exécution avec des arguments et d'instruire du client de communication de socket. (Simplement, la virgule qui passe est séparée par .split (","))
import socket
#Define the host and port
host = 'localhost'
port = 64123 #Port approprié
#socket connect
serversock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
serversock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
serversock.bind((host,port))
serversock.listen(1)
if __name__ == '__main__':
client_socket, client_address = serversock.accept()
while True:
#En attente de message
rcvMsg = client_socket.recv(2048)
#Réception des messages
print('Receive data : %s' % (rcvMsg))
rcvMsg = rcvMsg.decode('utf-8').split(',')
#Vérifiez si le format est correct
Args1 = rcvMsg[0]
Args2 = rcvMsg[1]
Args3 = rcvMsg[2]
###Description de la section de traitement###
s_msg = 'Finish'
s_msg = s_msg.encode('utf-8')
client_socket.sendall(s_msg)
print('Send finish')
client_socket.close()
import socket
host = 'localhost'
port = 64123 #Tout port local. Match avec le serveur.
#Communication de socket démarrée
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, port))
while True:
print('input command...')
massage = input().encode('utf-8')
client.send(massage)
response = client.recv(4096)
#Veuillez saisir la condition de pause de While
client.close()
Créez un serveur et un client comme celui-ci, Envoyer le message du client séparé par des virgules → Exécuter le traitement sur le serveur Je l'ai fait comme ça.
Puisque la surcharge a été éliminée, [Mesurer le temps] jusqu'à ce que le graphique soit généré (https://qiita.com/fantm21/items/3dc7fbf4e935311488bc). Tout d'abord, créez Serveur + Client avec Python et vérifiez l'opération. Environ 0,2-0,4 secondes. Cela peut toujours être utilisé, mais si vous le souhaitez, je veux le rendre un peu plus rapide.
Où est-ce lent ??
def Heatmap(data):
ax = sns.heatmap(data)
return ax
~ 0,1 seconde 2. filesave
plt.savefig(os.path.join(save_path,save_name),facecolor="blue")
~ 0,15 seconde
Tout d'abord, 1. J'ai découvert que Seaborn est lent, alors j'ai décidé de le faire avec imshow de Matplotlib.
def HeatMapFast(data):
plt.figure()
plt.imshow(data,interpolation='nearest',vmin=0,vmax=15,cmap='rainbow')
plt.colorbar()
#bx = plt.show()
return plt
~0.05 Avec cela, la partie de création de la carte thermique est OK une fois.
Le suivant est d'environ 2. [Étude de l'extension de la mémoire] sans réellement enregistrer savefig (https://qiita.com/kaito__/items/9aa63cccc99261814065)
Cette méthode n'a pas du tout changé le processus d'exécution. Il semble qu'il faut du temps pour effectuer le processus avant d'enregistrer le graphique. Cette partie est une tâche future.
import time
import socket
import os
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
#les données sont un tableau à deux dimensions.fichier csv
data = np.loadtxt(load_path,delimiter=",")
#carte de chaleur Seaborn
hoge = Heatmap(data)
hoge.plot()
plt.savefig(os.path.join(save_path,save_name),facecolor="blue")
#carte thermique matplotlib
hogehoge = HeatMapFast(data)
hogehoge.savefig(os.path.join(save_path,save_name2))
loadCSV:0.000997781753540039[sec]
HeatMap():0.09075665473937988[sec]
SaveFig:0.115692138671875[sec]
HeatMapFast():0.05684828758239746[sec]
SaveFig2:0.13364338874816895[sec]
C'est tout. HeatMap () est Seaborn et HeatMapFast () est imshow. Les deux ont une image de 0,2 seconde ou moins lorsqu'ils sont combinés avec savefig. Je veux faire un peu plus vite.
Recommended Posts