MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Dlaczego PyGame zawiesza się w połączeniu z PyMongo?

Konkretny wyjątek, który napotykasz, wydaje się być związany z twoim połączeniem mongo. Czy możesz połączyć się ze swoją bazą danych w kompasie MongDB?

W każdym razie Twoja obecna architektura sprawi, że pętla gry będzie zależna od zapisów w bazie danych, co może zająć dużo czasu.

Stworzyłem przykład, który używa oddzielnego wątku do zarządzania połączeniem MongoDB i komunikuje się z głównym wątkiem za pomocą kolejki. Ten przykład zawiera również liczbę klatek na sekundę na pasku tytułu i ogranicza pętlę gry do sześćdziesięciu klatek na sekundę. Jeśli dodasz to do istniejącego skryptu, powinieneś zaobserwować spadek szybkości klatek za każdym razem, gdy nastąpi wstawienie bazy danych.

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nieprawidłowa liczba z zapytania agregującego

  2. Jak mogę przestawić na MongoDB

  3. Jak zmodyfikować konfigurację zestawu replik?

  4. Samoobsługowa MongoDB

  5. mangusta findOne funkcja zwraca undefine