我同时调用了两个函数,并且这些函数都被触发了,但是当进行mysql查询时,代码似乎在运行并停留在无限循环中,没有返回错误。
下面是我代码:
- 主文件. py**
import threading
import siparis_kontrolu
import dolar_euro_guncelle
def dd1():
print("a")
siparis_kontrolu.siparis_kontrolu()
def dd2():
print("b")
dolar_euro_guncelle.dolar_euro_guncelle()
t1 = threading.Thread(target=dd1)
t2 = threading.Thread(target=dd2)
t1.start()
t2.start()
- 西帕里斯控制台. py**
import mysql_db
def siparis_kontrolu():
try:
while True:
print("test1")
tum_kullanicilar = mysql_db.mysql_get_all("select * from users")
print("test2")
- 美元_欧元_贡塞勒. py**
import urllib.request
import json
import mysql_db
import time
import logla
def dolar_euro_guncelle():
while True:
try:
print("f")
data = urllib.request.urlopen(
"https://finans.truncgil.com/today.json")
for line in data:
line = json.loads(line.decode('utf-8'))
USD = round(float(line['USD']["Satış"].replace(",", ".")), 2)
EUR = round(float(line['EUR']["Satış"].replace(",", ".")), 2)
mysql_db.mysql_update("update variables set EUR='" +
str(EUR)+"', USD='"+str(USD)+"' where id='4'")
time.sleep(10)
print("USD/EUR guncellendi.")
except Exception as e:
logla.logla(e, "dolar_euro_guncelle")
print(e)
- mysql_数据库. 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)
def mysql_update(sorgu):
try:
mycursor.execute(sorgu)
mydb.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)
当我运行www.example.com时,这些内容被写入控制台:main.py these are written to the console:
项目a
B
f级
测试1
test2和USD/EUR guncellendi没有打印出来,我不知道到底出了什么问题,当我不使用线程直接触发siparis_kontrolu. py时,它工作正常
它保持图片中的样子,代码也没有停止,但是它没有做我想让它做的事情。
1条答案
按热度按时间vd8tlhqk1#
这看起来像是DB连接的并发问题(假设您的
siparis_kontrolu.py
没有因为try
语句中缺少except
/finally
部分而引发语法错误,那么sleep
也会丢失)。“SELECT”语句与“Update”语句冲突。
结果是:每个线程都需要自己的数据库连接!
最简单的方法是在
mysql_db.py
中打开另一个数据库连接并创建另一个游标(也许另一个游标示例就足够了):但是创建一个
DbHandler
类并在几个线程中使用它的示例会更简洁。