MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

PyMongo के साथ संयोजन में उपयोग किए जाने पर PyGame फ्रीज क्यों हो जाता है?

आप जिस विशिष्ट अपवाद का सामना कर रहे हैं वह आपके मोंगो कनेक्शन से संबंधित प्रतीत होता है। क्या आप MongDB Compass में अपने डेटाबेस से कनेक्ट करने में सक्षम हैं?

किसी भी स्थिति में, आपका वर्तमान आर्किटेक्चर आपके गेम लूप को डेटाबेस के लेखन पर निर्भर करेगा, जिसमें महत्वपूर्ण समय लग सकता है।

मैंने एक उदाहरण बनाया है जो MongoDB कनेक्शन को प्रबंधित करने के लिए एक अलग थ्रेड का उपयोग करता है और एक कतार का उपयोग करके मुख्य थ्रेड के साथ संचार करता है। इस उदाहरण में टाइटल बार में फ्रेम दर भी शामिल है, और गेम लूप को साठ एफपीएस तक सीमित करता है। यदि आप इसे अपनी मौजूदा स्क्रिप्ट में जोड़ते हैं, तो जब भी कोई डेटाबेस इंसर्ट होता है तो आपको फ्रेम दर में गिरावट दिखाई देगी।

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 कैप्ड कलेक्शन और मोनोटिक रूप से बढ़ता हुआ इंडेक्स

  2. मोंगोडब-जावा पीओजेओ आईडी वापस नहीं कर रहा है

  3. Node.js नेवला प्रदर्शन

  4. MongoDB सॉर्ट केवल प्रविष्टि मौजूद है, कुंजी पहले मान के साथ और कुंजी शून्य के साथ या अंतिम मौजूद नहीं है

  5. मोंगो संग्रह में विशेष पात्रों के साथ काम करना