J'ai récemment crée un script qui simule l'utilisation d'un navigateur (librairie mechanize), pour cela j'utilise un thread qui répète des actions dans une boucle infinie, je mets le thread en pause pendant 1 sec et il recommence. Or, mon problème est le suivant, au fur et à mesure que le temps passe mon script utilise de plus en plus de ressources sur mon vps et fini par crasher suite à la limite autorisée en mémoire par mon hébergeur.
Ahaha pas mal cette petite boule de cristal (t'as oublié un 't' au fait).
Si il prend trop de mémoire, ça veut dire que tu as une fuite mémoire quelque part, ou que tu as mal conçu ton code (plus probable), mais vu qu'on est pas dans ta tête, on ne voit pas le code. Par ailleurs, merci d'utiliser la balise code (le bouton </>) pour mettre ton code dedans, merci.
# -*- coding: Latin-1
__author__ = 'Fx998'
###########
##IMPORTS##
###########
import time
import pickle
import mechanize
from threading import Thread
from Config import ConfigManager
from Parser import ParserManager
from Status.StatusManager import *
from Attack import AttackManager
from Build import BuildManager
from Parties import PartiesManager
from Market import MarketManager
#########
###VARS##
#########
c27While = True
nav = mechanize.Browser()
nav.addheaders[0] = ("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36")
threadList = []
exitMenu = False
#############
##FUNCTIONS##
#############
#############
###CLASSES###
#############
class Bot(Thread):
"""The thread Bot"""
def __init__(self):
Thread.__init__(self)
self.Terminated = False
def run(self):
"""While running"""
while not self.Terminated:
#print("START")
#BuildManager.checkbuilds()
#PartiesManager.test()
#ParserManager.parsecheck(nav)
AttackManager.send(nav)
MarketManager.sendtasks(nav)
PartiesManager.doparties(nav)
time.sleep(1)
def stop(self):
"""Killing the thread"""
self.Terminated = True
##############
#####BODY#####
##############
print("c27 BOT")
loggedIn = ConfigManager.login(nav)[1]
MarketManager.reset()
AttackManager.reset()
print("Options List:")
print("(1): Start the Bot\n(2): Stop the Bot\n(3): Attack Manager\n(4): Build Manager\n(5): Parties Manager\n(6): Market Manager\n(7): EXIT")
while c27While and loggedIn == True:
data = raw_input(">>>: ")
datastr = str(data)
if datastr == "1":
if len(threadList) > 1:
print("c27 bot is already launched ! Stop it before run !")
else:
t = Bot()
t.start()
threadList.append(t)
elif datastr == "2":
t.stop()
print("c27 bot is stopped !")
elif datastr == "3":
while exitMenu == False:
print(">>>[ATTACK MANAGER]<<<\n(1): Add Raid Task\n(2): Edit Raid Task\n(3): Delete Raid Task\n(4): Edit Repeat all\n(5): Exit AttackManager")
data = raw_input(">>>Your Attack Option Choice: ")
choice = str(data)
if choice == "1":
AttackManager.addraid()
elif choice == "2":
AttackManager.editraid()
elif choice == "3":
AttackManager.deleteraid()
elif choice == "4":
AttackManager.changeRepeat()
elif choice == "5":
print("Exiting AttackManager !")
exitMenu = True
else:
print("Invalid Command, Try again !")
exitMenu = False
elif datastr == "4":
pass
elif datastr == "5":
pass
elif datastr == "6":
while exitMenu == False:
print(">>>[MARKET MANAGER]<<<\n(1): Add Market Task\n(2): Edit Market Task\n(3): Delete Market Task\n(4): Exit MarketManager")
data = raw_input(">>>Your Market Option Choice: ")
choice = str(data)
if choice == "1":
MarketManager.addmarkettask()
elif choice == "2":
MarketManager.editmarkettask()
elif choice == "3":
MarketManager.deletemarkettask()
elif choice == "4":
print("Exiting MarketManager !")
exitMenu = True
elif choice == "99":
print(MarketManager.readtaskmarket())
else:
print("Invalid Command, Try again !")
exitMenu = False
elif datastr == "7":
print("Bye !")
c27While = False
#TEST COMMAND
Je suis débutant en python c'est un peu codé à l'arrache. En gros mon script consiste à récupérer des commandes par un utilisateur et celui permet en parallèle de réaliser des actions.
Peux-tu commenter un peu ton code, car je ne connais quasiment aucun de ces modules, et si je veux pouvoir t'aider il me faut un peu d'aide moi aussi, libre à toi de le faire ou d'attendre des gens plus expérimentés
Ca revient à ce que j'ai dit précédemment, l'utilisateur du script doit pouvoir entrer des commandes dans la console et des autres tâches sont effectués en même temps c'est pour ça que j'ai choisi le module threading. De plus, je n'utilise qu'un seul thread car le site web sur lequel j'utilise ce script n'accepte qu'une seule session.
Problème gestion de mémoire thread
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Je suis débutant en python c'est un peu codé à l'arrache. En gros mon script consiste à récupérer des commandes par un utilisateur et celui permet en parallèle de réaliser des actions.