Travaillant actuellement sur un projet, je suis amené à coder un script qui:
1)Sélectionne des URLs dans une BDD selon certains critères.
2)Boucle
2.1)Récupère le contenu de la page.
2.2)Contrôle la présence d'une phrase dans le contenu de la page.
2.3)Met à jour des informations dans la BDD.
La BDD contiendrait plusieurs centaines de liens à contrôler à intervalle régulier. Le script devra donc être capable d'attendre un timestamp précis avant d'effectuer la tâche puis se mettre en veille jusqu'au prochain test. Le script devra donc "tourner" tout seul.
A terme, il se pourrait pour assurer le fonctionnement du script 24/24 ainsi que sa rapidité, que deux serveurs ou plus soit mis à disposition pour ce script. On aurait alors la configuration suivante:
Serveur A: récupère les infos de la BDD et les envoie au serveur B et C.
Serveur B et C: effectuent les tests et renvoie le résultat à A.
Serveur A: enregistre le résultat dans la BDD.
Il faudrait aussi prévoir que dans le cas où le serveur A tombe en panne, le serveur B puisse prendre la relève.
Cette architecture ne se mettrait en place qu'à (très) long terme. Pour l'instant, un seul serveur sera mis à disposition pour le script. Mais il faudrait que je puisse ensuite modifier le script pour l'adapter à cette architecture.
Ma question est: est-ce possible de réaliser cela relativement facilement sur un serveur dédié en langage Python ?
Si vous avez besoin de précisions, n'hésitez pas !
Oui. C'est typiquement le genre de chose qui se fait facilement en Python. La distribution du traitement peut, en revanche, s'avérer être une douleur dans le cul.
C'est assez simple a mettre en place.
Pour ce qui est de la distribution des taches, tu peut le faire a la main comme utiliser les SocketServer ( http://docs.python.org/library/socketserver.html ) qui n'est pas trop compiliquer.
Cependant, je suis sur qu'il existe de biblio pour faire de la distribution de taches. Apres, j'ai chercher du cote du "Grid Computing" ou "Cluster master slave python" et je suis tomber sur cette page : http://wiki.python.org/moin/ParallelProcessing
Merci pour ta réponse ! Apparemment, Python est LE langage qu'il me faut. Je vais passer le topic en résolu ce weekend, si quelqu'un a un commentaire à ajouter, il est le bienvenu !
Je me suis un peu renseigné sur Python et du côte de MySQL tout a l'air OK. Apparemment, toutes les fonctionnalités disponibles pour PHP le sont aussi sous Python. Ou bien je me trompe ?
Par contre du côté de cURL, je ne suis pas sûr. Après quelques recherches sur Google, il semble que c'est une implémentation, disponible sur certaines versions de Python et je n'ai trouvé personne qui semblait s'en servir pour récupérer le contenu d'une page. Est-ce que cURL sous Python est aussi puissant que sous PHP ?
Toutes ces questions car je ne veux pas me lancer dans l'apprentissage d'un langage si il ne peut pas me répondre à mes besoins.
Avant de chercher du côté de cURL, regarde la lib standard Python, perso j'y ai toujours trouvé ce dont j'avais besoin niveau réseau sans avoir besoin de taper dans les libs externes.
Et tu peux aussi arrêter de perdre ton temps à douter à ce point, Python est un langage complet, et ton projet n'est pas encore assez complexe pour justifier tant de précautions.
encore une petite question: Imaginons que j'arrive à coder un script qui teste un lien puis se met en pause (timer) jusqu'au prochain test, tout cela sur un serveur dédié. Que se passerai-il si le serveur est down quelques instants interrompant ainsi le programme. Celui-ci se serait arrêté et n'effectuerait plus de contrôle. Y a-t-il un moyen d'être sûr que même en cas d'arrêt, de bug,... Le programme se relance de lui-même ?
Un exemple de code, ça sera plus simple pour expliquer
>>> import urllib.request # importation du module urllib.request
>>> test = urllib.request.Request("http://docs.python.org") # Test si la connection est possible
>>> print(test.unverifiable) # est-ce que l'url est invérifiable?
False # Non! Dans ce cas le serveur n'est pas down
Citation : la doc officielle
unverifiable should indicate whether the request is unverifiable, as defined by RFC 2965. It defaults to False. An unverifiable request is one whose URL the user did not have the option to approve. For example, if the request is for an image in an HTML document, and the user had no option to approve the automatic fetching of the image, this should be true.
Apparemment ça ne fonctionne pas comme je le pense, autant utilisé un try except
from urllib.request import urlopen
from urllib.error import URLError
from time import sleep
connecte = False
while not connecte:
try:
data = urllib.urlopen(mon_url)
connecte = True
except URLError:
sleep(30)
Je ne suis pas sûr que je me suis bien fait comprendre. Apparemment, ton script teste une page web distante.
Ma question est de savoir ce qu'il se passerait si le serveur hébergeant le script contrôlant les liens est down. En clair, que se passe-t-il si MON hébergeur tombe en rade et redémarre ? Mon script sera interrompu, mais y a-t-il un moyen pour qu'il se relance automatiquement ?
× 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.
Blond, bouclé, toujours le sourire aux lèvres...
Blond, bouclé, toujours le sourire aux lèvres...