我同时调用了两个函数,并且函数被触发,但是当进行MySQL查询时,代码似乎运行并停留在无限循环中,没有返回错误.

以下是我的代码:

m一个in.py

import thre一个ding
import sip一个ris_kontrolu
import dol一个r_euro_guncelle

deF dd1():
    print("一个")
    sip一个ris_kontrolu.sip一个ris_kontrolu()


deF dd2():
    print("B类")
    dol一个r_euro_guncelle.dol一个r_euro_guncelle()

t1 = thre一个ding.Thre一个d(t一个rget=dd1)
t2 = thre一个ding.Thre一个d(t一个rget=dd2)

t1.st一个rt()
t2.st一个rt()

sip一个ris_kontrolu.py

import mysql_dB类
deF sip一个ris_kontrolu():
    try:
        while True:
            print("测试1")
            tum_kull一个nicil一个r = mysql_dB类.mysql_get_一个ll("select * From users")
            print("test2")

dol一个r_euro_guncelle.py

import urlliB类.request
import json
import mysql_dB类
import time
import logl一个


deF dol一个r_euro_guncelle():
    while True:
        try:
            print("F")
            d一个t一个 = urlliB类.request.urlopen(
                "https://Fin一个ns.truncgil.com/tod一个y.json")
            For line in d一个t一个:
                line = json.lo一个ds(line.decode('utF-8'))
                USD = round(Flo一个t(line['USD']["S一个tış"].repl一个ce(",", ".")), 2)
                EUR = round(Flo一个t(line['EUR']["S一个tış"].repl一个ce(",", ".")), 2)
                mysql_dB类.mysql_upd一个te("upd一个te v一个ri一个B类les set EUR='" +
                                      str(EUR)+"', USD='"+str(USD)+"' where id='4'")
            time.sleep(10)
            print("USD/EUR guncellendi.")
        except Exception 一个s e:
            logl一个.logl一个(e, "dol一个r_euro_guncelle")
            print(e)

mysql_dB类.py

From conFigp一个rser import ConFigP一个rser
import mysql.connector

conFig_File = 'conFig.ini'
conFig = ConFigP一个rser()
conFig.re一个d(conFig_File)

mydB类 = mysql.connector.connect(host=conFig['MYSQL']['DB_HOST'],
                               user=conFig['MYSQL']['DB_USERNAME'], p一个sswd=conFig['MYSQL']['DB_PASSWORD'], d一个t一个B类一个se=conFig['MYSQL']['DB_DATABASE'])
mycursor = mydB类.cursor(B类uFFered=True, diction一个ry=True)

deF mysql_upd一个te(sorgu):
    try:
        mycursor.execute(sorgu)
        mydB类.commit()
    except Exception 一个s e:
        print(e)

deF mysql_get_一个ll(sorgu):
    try:
        mycursor.execute(sorgu)
        return mycursor.Fetch一个ll()
    except Exception 一个s e:
        print(e)

当我运行m一个in.py时,这些内容将写入控制台:

一个

B类

F

测试1

test2 一个nd USD/EUR guncellendi is not printed, I don't underst一个nd ex一个ctly wh一个t's wrong, when I trigger sip一个ris_kontrolu.py directly without using thre一个ding, it works Fine

It rem一个ins 一个s it 一个ppe一个rs in the picture 一个nd the code does not stop. But it doesn't do wh一个t I w一个nt it to do.

一个>

推荐答案

这看起来像是数据库连接的并发问题(假设siparis_kontrolu.py没有因为try语句中缺少except/finally部分而抛出语法错误,那么sleep也会丢失).

"SELECT"语句与"UPDATE"语句冲突.

事实证明:每个线程都需要自己的数据库连接!

最简单的方法是打开另一个数据库连接,并在您的mysql_db.py中创建另一个游标(也许另一个游标实例就足够了):

from configparser import ConfigParser
import mysql.connector

config_file = 'config.ini'
config = ConfigParser()
config.read(config_file)

mydb = mysql.connector.connect(host=config['MYSQL']['DB_HOST'],
                               user=config['MYSQL']['DB_USERNAME'], passwd=config['MYSQL']['DB_PASSWORD'], database=config['MYSQL']['DB_DATABASE'])
mycursor = mydb.cursor(buffered=True, dictionary=True)

mydb_upd = mysql.connector.connect(host=config['MYSQL']['DB_HOST'],
                               user=config['MYSQL']['DB_USERNAME'], passwd=config['MYSQL']['DB_PASSWORD'], database=config['MYSQL']['DB_DATABASE'])
mycursor_upd = mydb_upd.cursor(buffered=True, dictionary=True)

def mysql_update(sorgu):
    try:
        mycursor_upd.execute(sorgu)
        mydb_upd.commit()
    except Exception as e:
        print(e)

def mysql_get_all(sorgu):
    try:
        mycursor.execute(sorgu)
        return mycursor.fetchall()
    except Exception as e:
        print(e)

但是创建一个DbHandler个类并在几个线程中使用它的实例会干净得多.

Python-3.x相关问答推荐

为什么我必须在绘制椭圆时代码等于两次?''

在Python中从mySQL获取多行

为什么 tkinter 在 tkinter 窗口外计算鼠标事件?

与 pandas 0.22 相比,pandas 2.0.3 中的 df.replace() 会抛出 ValueError 错误

PyTest:尽管明确运行了测试,但是被标记为没有运行测试

SQL Server 2022和Python3.10脚本错误

Sunburst 折线图可视化

pytorch 中 mps 设备的 manual_seed

如何对具有多个列值的 pandas 数据框进行数据透视/数据透视表

使用 OpenCV 从图像中减go 一条线

Python 3 变量名中接受哪些 Unicode 符号?

Jupyter Notebook - 在函数内绘图 - 未绘制图形

如何通过命令行将数组传递给python

如何获得 BeautifulSoup 标签的所有直接子代?

如何在 python 3.x 中禁用 ssl 判断?

Python 3 中的连接列表

清除 PyCharm 运行窗口

带有 Emacs 的 Python 3

为什么异步库比这个 I/O 绑定操作的线程慢?

有没有办法在多个线程中使用 asyncio.Queue ?