Je suis actuellement en train d'écrire une application de serveur client comme un exercice et j'ai presque tout pour travailler jusqu'à présent, mais il y a un obstacle mental que je n'ai pas pu google moi-même avec succès.Python Threading Concept Question
Dans l'application serveur, ai-je raison de penser que le threading du gestionnaire de paquets et du gestionnaire de base de données pour fonctionner à partir d'une pile est la bonne chose à faire? L'idée est qu'un thread boucle l'écoute des paquets et ajoute les données à une pile, puis l'autre thread extrait les données au bas de la pile et effectue des vérifications sur un db SQL.
Dans ce cas particulier, il est plus important que le gestionnaire de paquets continue de fonctionner. Je suppose que ma question est, est-ce une utilisation appropriée des threads et où vais-je rencontrer des problèmes qui nécessitent le verrouillage des threads, par exemple, devrais-je verrouiller le gestionnaire db quand le thread paquet ajoute à la pile écrire et lire dire, la seule valeur dans la pile, etc
Merci à tous!
Voici un extrait du code, attention, c'est en cours alors ne jugez pas, aussi ma première tentative de python (dont je profite plus que perl ou php en ce moment!).
class socketListen(threading.Thread):
def run(self):
while True:
datagram = s.recv('1024')
if not datagram:
break
packetArray = datagram.split(',')
if packetArray[0] = '31337':
listHandle.put(packetArray)
s.close()
class stackOperations(threading.Thread):
def run(self):
while True:
#pull the last item off the stack and run ops on it
#listHandle.getLast is the last item on the queue
def
class listHandle():
def put(shiftData):
if not mainStack:
mainStack = []
mainStack.insert(0,shiftData)
def getLast:
return mainStack.pop()
Non c'est parfait! Je dois être tout foiré cependant, ne pas enfiler le multitraitement? Et voulez-vous dire utiliser une file d'attente avec la configuration actuelle que j'ai ici avec les discussions ou passer à un autre module? – Melignus
Threading exécute des processus simultanément, généralement sur le même processeur. Le multitraitement exécute des processus distribuant simultanément le travail entre plusieurs processeurs. Similaire, mais distinct. – jathanism
Gotcha, ouais j'ai trouvé la page docs du module multi-traitement juste maintenant. De bonnes choses et je comprends parfaitement. Je suppose que je pensais qu'il y avait peut-être quelque chose où l'interprète passe des fils aux noyaux s'ils sont présents, mais je suppose que c'est juste un vœu pieux. Un module multitraitement a du sens. Merci pour l'aide des gars et les réponses rapides, vous êtes génial! – Melignus