MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tại sao PyGame bị đóng băng khi sử dụng kết hợp với PyMongo?

Ngoại lệ cụ thể mà bạn gặp phải dường như liên quan đến kết nối mongo của bạn. Bạn có thể kết nối với cơ sở dữ liệu của mình trong MongDB Compass không?

Trong mọi trường hợp, kiến ​​trúc hiện tại của bạn sẽ làm cho vòng lặp trò chơi của bạn phụ thuộc vào việc ghi cơ sở dữ liệu, điều này có thể mất nhiều thời gian.

Tôi đã tạo một ví dụ sử dụng một luồng riêng để quản lý kết nối MongoDB và giao tiếp với luồng chính bằng cách sử dụng một hàng đợi. Ví dụ này cũng bao gồm tốc độ khung hình trong thanh tiêu đề và giới hạn vòng lặp trò chơi ở 60 FPS. Nếu bạn thêm nó vào tập lệnh hiện có của mình, bạn sẽ thấy tốc độ khung hình giảm xuống bất cứ khi nào việc chèn cơ sở dữ liệu xảy ra.

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. Tải lên và truy xuất tệp bằng MongoDB và Spring Boot

  2. Dân cư ở Mongoose

  3. đếm trường tài liệu con và tổng số tiền trong mongodb

  4. Làm thế nào để sử dụng tập hợp MongoDB để phân trang?

  5. mongodb hiển thị danh sách dbs