python - Thread While True:循环使代码无法迭代
问题描述
我有一个线程作为守护进程运行。
在这个线程中,我希望不断更新一些变量,这些变量依赖于从 MySQL 数据库中读取行。
问题是,程序不想遍历 While True:-loop,尽管它在线程内部。这不是线程的重点:我可以同时运行两个循环吗?
import threading
import tkinter as tk
import pip
import time
import mysql.connector
from time import sleep
global score
global countdown
en = 1
score = 0
countdown = 1
print("Hiya!")
mydb = mysql.connector.connect(
host="",
user="",
password="",
database='',
auth_plugin=''
)
mycursor = mydb.cursor(prepared=True)
class Mysql(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.daemon = True
self.en = 1
self.læsTidScoreNu = "SELECT tidSCoreNu FROM bois WHERE id = 1"
self.læsTidMål = "SELECT tidMål FROM bois WHERE id = 1"
self.opdaterTidMål = "UPDATE bois SET tidMål = %s WHERE id = %s"
self.læsStopKnap = "SELECT stopKnap FROM bois WHERE id = 1"
self.run()
def run(self) -> None:
global mycursor
global mydb
while True:
mycursor.execute(self.læsTidScoreNu)
self.råTidScoreNu = mycursor.fetchone()
self.tidScoreNu = float("{}".format('%.2f' % self.råTidScoreNu))
mycursor.execute(self.læsTidMål)
self.råTidMål = mycursor.fetchone()
self.tidMål = float("{}".format('%.2f' % self.råTidMål))
mycursor.execute(self.læsStopKnap)
self.stopKnap = mycursor.fetchone()
mydb.commit()
data = Mysql()
print(data.råTidScoreNu)
print(data.tidMål)
forevigt = 0
while (forevigt != 1):
i = 0.00
# Servodøren skal åbnes her i denne kode
while (data.stopKnap != 1):
# Indtast Pinkoden
f = int(input(
"Kodeord - bemærk her, at kodeordene er pinkoderne fra min egen database, bare indtast en værdi mellem 1-6"))
mycursor.execute("SELECT id,adresse,name,pinkode_brugt,score FROM bois WHERE id=%s", (f,))
# MySQL Commands
opdaterSlutScoren = "UPDATE bois SET pinkode_brugt = pinkode_brugt +1, score = %s WHERE id = %s"
opdaterTidScoreNu = "UPDATE bois SET tidScoreNu = %s WHERE id = %s"
myresult = mycursor.fetchall()
row_count = mycursor.rowcount
print(myresult)
print("number of affected rows: {}".format(row_count))
if(f == 1):
print("ommer")
else:
if (row_count == 1):
# Servomotordøren åbner(function)
print(row_count)
print(data.tidScoreNu)
while (i != data.tidMål) and (i <= data.tidMål) and (data.stopKnap != 1):
print('%.2f' % i)
i = i + 0.01
timeLeft = data.tidScoreNu - i
iTwo = data.tidMål
countdown = float('%.2f' % i)
score = str("{}".format('%.2f' % i))
mycursor.execute(opdaterTidScoreNu, (score,en))
print("THIS IS X", data.tidMål)
time.sleep(0.01)
mydb.commit()
# Hvis spillet stoppes, or i ikke når timerens slutværdi, vil scoren gemmes
if (i != data.tidScoreNu):
# Point bliver tilføjet
print(score, i, countdown, myresult)
print("Dette er dit resultat: {}".format(score))
mycursor.execute(opdaterSlutScoren, (score, f))
else:
# Point bliver tilføjet
print("Ingen point")
mycursor.execute(opdaterSlutScoren, (score, f))
if row_count == 0:
print("fejl!")
print("Færdig")
i = 0
mycursor.execute(opdaterTidScoreNu, ("0", en))
mydb.commit()
# Mangler servo-logik, samt en timer
解决方案
推荐阅读
- java - 获取源网页的源代码,javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
- node.js - Nodjs 招摇自动生成集成
- kubernetes - 关于k8s metrices server 只能监控部分资源
- python - 客户端无法接收 UDP 消息
- r - 频率变量总结
- laravel - Laravel Yajra 数据表全局搜索过滤器
- linux - 如何删除使用“make modules_install”命令安装的 linux 外部内核模块?
- arrays - 无法在 Verilog 中创建“真实”类型数组
- python - 实现Asyncio通过socket同时发送多个文件
- ios - 仅警告一次:UITableView 被告知布局其可见单元格和其他内容而不在视图层次结构中?