sql >> Database >  >> NoSQL >> MongoDB

Waarom bevriest PyGame bij gebruik in combinatie met PyMongo?

De specifieke uitzondering die u tegenkomt, lijkt te maken te hebben met uw mongo-verbinding. Kunt u verbinding maken met uw database in MongDB Compass?

In ieder geval zal je huidige architectuur je gameloop afhankelijk maken van het schrijven van de database, wat veel tijd kan kosten.

Ik heb een voorbeeld gemaakt dat een aparte thread gebruikt om de MongoDB-verbinding te beheren en communiceert met de hoofdthread via een wachtrij. Dit voorbeeld bevat ook de framesnelheid in de titelbalk en beperkt de gameloop tot zestig FPS. Als je dat aan je bestaande script toevoegt, zou je de framesnelheid moeten zien dalen wanneer er een database wordt ingevoegd.

import time
import threading
import queue
import pygame
import pymongo

# Thread for Database storage
class MongoThread(threading.Thread):
    def __init__(self, queue):
        threading.Thread.__init__(self)
        self.queue = queue
        self.daemon = True

    def run(self):
        t_running = True
        client = pymongo.MongoClient("mongodb+srv://<insert-your-connection-string-here>")
        db = client.test
        c = db.scores
        while t_running:
            if self.queue.empty():
                time.sleep(0.1)
                pass
            else:
                data = self.queue.get()
                if data == "exit":
                    t_running = False
                else:
                    # do something with the queud data
                    c.insert_one(data)
                    print(c.count_documents({}))  # for debugging


WIDTH, HEIGHT = 1000, 400
FPS = 60

# create a queue to send commands from the main thread
q = queue.Queue()
# create and then start the thread
mongo_thread = MongoThread(q) 
mongo_thread.start()

pygame.init()
win = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()
run = True
score = 0
while run:
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            run = False
            q.put("exit")
        if e.type == pygame.KEYDOWN:
            # c.insert_one({"Score": score})
            q.put({"Score": score})

    score += 1
    win.fill((0, 0, 0))
    pygame.display.update()
    pygame.display.set_caption(f"FPS: {clock.get_fps():.1f}")
    clock.tick(FPS)
pygame.quit()



  1. Volledige tekst zoeken in mongodb in .net

  2. MongoDB $add

  3. schemakenmerken ophalen van Mongoose Model

  4. Een subdocumentverzameling opvragen met MongoDB en C#-stuurprogramma