sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvorfor fryser PyGame, når det bruges i kombination med PyMongo?

Den specifikke undtagelse, du støder på, ser ud til at være relateret til din mongo-forbindelse. Er du i stand til at oprette forbindelse til din database i MongDB Compass?

Under alle omstændigheder vil din nuværende arkitektur gøre din spilløkke afhængig af databaseskrivningerne, hvilket kan tage betydelig tid.

Jeg har lavet et eksempel, der bruger en separat tråd til at styre MongoDB-forbindelsen og kommunikerer med hovedtråden ved hjælp af en kø. Dette eksempel inkluderer også billedhastigheden i titellinjen og begrænser spilløkken til tres FPS. Hvis du føjer det til dit eksisterende script, bør du se billedhastigheden falde, hver gang der sker en databaseindsættelse.

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. nodejs mongodb objekt-id til streng

  2. adgang til underdokumenter på Rails 3 ved hjælp af Mongoid

  3. Redis - Fremme en slave til at master manuelt

  4. Kunne ikke oprette forbindelse til Redis på 127.0.0.1:6379:Forbindelse nægtet