st-ten-1/src/test/tdb.py
2024-10-24 13:34:14 +02:00

101 lines
2.7 KiB
Python

#!/usr/bin/env python3
import faulthandler
import signal
import sys
from uuid import uuid4 as uuid
from PyQt6.QtWidgets import QApplication
from peewee import AutoField, Model, TextField
from playhouse.sqlite_ext import SqliteExtDatabase
from PyQt6.QtCore import QObject, QThread, QTimer
# SETUP QUITTING ON CTRL+C
signal.signal(signal.SIGINT, quit)
# SETUP FAULTHANDLER
faulthandler.enable(file=sys.stderr, all_threads=True)
db = SqliteExtDatabase(
"/tmp/tdb.sqlite3",
pragmas={ # see https://www.sqlite.org/pragma.html
"auto_vacuum": 1,
"busy_timeout": 5000,
"cache_size": round(-64e3),
"foreign_keys": 1,
"ignore_check_constraints": 0,
"journal_mode": "wal",
"synchronous": 0,
},
timeout=5
)
class BaseModel(Model):
"""A base model that will use our Sqlite database."""
class Meta:
global db
database = db
class Data(BaseModel):
id = AutoField(primary_key=True, unique=True, null=False)
data = TextField(null=True, default=lambda: uuid().hex)
models_reference = {
"data": Data,
}
db.connect()
db.create_tables(list(models_reference.values()))
class Threaded(QObject):
def __init__(self):
super().__init__()
self._timer = QTimer()
@db.connection_context()
# @db.atomic()
def start(self):
# for data in Data.select():
while True:
for data in list(Data.select().order_by(Data.id.desc()))[:1] + [Data()]:
data.save()
print(str(int(QThread.currentThreadId())), data.id, flush=True)
# QThread.msleep(2000)
for i in range(2):
data = Data()
data.save()
print(str(int(QThread.currentThreadId())), data.id, flush=True)
# QThread.msleep(2000)
components = {1: Threaded()}
threads = {}
for component_name in components:
threads[component_name] = QThread()
threads[component_name].setTerminationEnabled(True)
components[component_name].moveToThread(threads[component_name])
for component_name, thread in threads.items():
component = components[component_name]
thread.started.connect(component.start)
thread.start()
QApplication.processEvents()
# QThread.msleep(1000)
QApplication.processEvents()
while True:
for data in list(Data.select().order_by(Data.id.desc()))[:1] + [Data()]:
data.save()
# print(str(int(QThread.currentThreadId())), data.id, flush=True)
print("main", data.id, flush=True)
# QThread.msleep(2000)
for i in range(2):
data = Data()
data.save()
# print(str(int(QThread.currentThreadId())), data.id, flush=True)
print("main", data.id, flush=True)
# QThread.msleep(2000)