Probleme bei Threads, Priorität zu hoch?!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DasPinsch

Hallo,
ich habe eine Art Brettspielin Python mit Hilfe von Pygame geschrieben und habe folgendes Problem:
Die KI der Bots wird in einem Thread berechnet. Wenn nun nur noch Computergesteuerte Spieler da sind, stockt die Hintergrundmusik, die mit Hilfe des pygame.mixer.music Moduls ausgegeben wird. Was kann ich dagegen tun?
DasPinsch

Des Weiteren habe ich das Problem, dass die Netzwerkthreads zu viel Zeit in Anspruch nehmen.. Das Spiel beim Host ruckelt daher...
DasPinsch

*push*
Kommt Kinners, muss das Informatikprojekt Donnerstag abgeben :P :wink:

MfG
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Naja, musst du alles in echten Threads haben? Vielleicht kannst du auch lightweight Threads wie Greenlets oder so verwenden.. das ist nur mal so 'ne Idee.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Ob Code in Threads viel Rechenzeit verbraucht oder in Greenlets, macht eigentlich keinen Unterschied.

Solange es kein Echzeit-Spiel ist, frage ich mich auch nach dem Sinn von Threads? Kann ein Gegner denn schon seinen nächsten Zug planen, bevor der des aktuellen Spielers getätigt wurde?
DasPinsch

Es ist relativ Schwierig die KI in einzelne Schritte zu zerlegen. Das würde also bedeuten, dass das Spiel bei einem Zug des Gegners warten muss bis dieser fertig ist und sozusagen "hängt". Daher dachte ich die KI in einen eigenen Thread zu packen, so dass das eigentliche Spiel wähhrend der KI-Berechnung einfach weiterläuft.
Bei dem Netzwerkthreads ist es ja sogar eigentlich unumgänglich Threads zu benutzen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

DasPinsch hat geschrieben:Bei dem Netzwerkthreads ist es ja sogar eigentlich unumgänglich Threads zu benutzen.
Nein, nicht unbedingt. So kannst du mit asyncore ohne Threads arbeiten.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
DasPinsch

Ok.
Allerdings habe ich es nun bereits in Threads gemacht und werde es wohl auch nicht mehr umschreiben... Gibt es da keine Möglichkeiten? Kann doch nicht sein, dass das mit Python nich ginge...
BlackJack

DasPinsch hat geschrieben:Es ist relativ Schwierig die KI in einzelne Schritte zu zerlegen. Das würde also bedeuten, dass das Spiel bei einem Zug des Gegners warten muss bis dieser fertig ist und sozusagen "hängt". Daher dachte ich die KI in einen eigenen Thread zu packen, so dass das eigentliche Spiel wähhrend der KI-Berechnung einfach weiterläuft.
Bei dem Netzwerkthreads ist es ja sogar eigentlich unumgänglich Threads zu benutzen.
Also kann eine KI schon ihren nächsten Zug planen ohne alle anderen Züge zu kennen?

Wie sieht's aus, wenn Du den KI's an ein paar Stellen eine kleine Ruhepause per `pygame.time.delay()` verpasst. Vielleicht liegt das Problem auch einfach nur daran, das der "Bildschirm" viel häufiger neu gezeichnet werden muss wenn nur noch die KI's spielen, weil die ja ohne Unterbrechung neue Züge produzieren.
Antworten