MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Защо PyGame замръзва, когато се използва в комбинация с PyMongo?

Конкретното изключение, което срещате, изглежда е свързано с вашата mongo връзка. Можете ли да се свържете с вашата база данни в MongDB Compass?

Във всеки случай текущата ви архитектура ще направи цикъла на играта ви зависим от записите в базата данни, което може да отнеме значително време.

Създадох пример, който използва отделна нишка за управление на MongoDB връзката и комуникира с основната нишка, използвайки опашка. Този пример включва също скоростта на кадрите в заглавната лента и ограничава цикъла на играта до шестдесет FPS. Ако добавите това към съществуващия си скрипт, трябва да видите спад на честотата на кадрите, когато се случи вмъкване на база данни.

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. MongoDB:Как да намеря по ID на поддокумент?

  2. TypeError:UserSchema не е конструктор (Schema не е конструктор MongoDB)

  3. Mongoose findbyid() връща нула

  4. Pymongo агрегат:филтриране по брой полета номер (динамично)

  5. Някакъв начин да запишете тип дата като местно време в MongoDB?