我的项目是thinner,如果我启动socket服务器,那么程序就会停止。
我有一个Tkinter项目,如果我启动了这个类,程序就会停止并挂起。
class msyslog:
def __init__(self):
HOST, PORT = "10.0.1.18", 514
global table_name
global db_name
global db_host
global db_user
global db_password
db_name = 'logging'
table_name = 'logs'
db_user = 'root'
db_password = ''
db_host = '127.0.0.1'
db_port = 3306
try:
# mysql_connection=mysql.connector.connect(user =db_user, password =db_password, host = db_host, port = db_port)
mysql_connection = mysql.connector.connect(host=db_host, user=db_user, passwd=db_password)
except mysql.connector.custom_error_exception():
print('Error:')
cursor = mysql_connection.cursor()
create_db(db_name, cursor)
cursor = mysql_connection.cursor()
create_table(db_name, table_name, cursor)
mysql_connection.commit()
mysql_connection.close()
server = socketserver.UDPServer((HOST, PORT), SyslogUDPHandler)
server.db_name = db_name
server.table_name = table_name
server.db_user = db_user
server.db_password = db_password
server.db_host = db_host
server.db_port = db_port
server.serve_forever()如何让服务器在后台工作,让GUI项目作为界面工作。
发布于 2019-08-22 01:37:18
问题
Tkinter停止了,因为Python永远忙于为服务器服务。你所做的就是告诉我该开始了。Tkinter有自己的循环(mainloop函数),当使用你的GUI时需要自由运行,所以tkinter可以添加小部件,销毁小部件,编辑小部件等等。同时,您对MySQL客户机说要永远为服务器服务,从而防止主循环自由循环。主循环等待,直到您使用按钮调用的函数完成。但是,你说过要永远服务,所以永远不会这样。
解决方案
从你的类中创建一条线程。也就是说,多个线程可以同时执行任务。
导入线程并在Python代码中执行以下语句。
threading.Thread(target=YourFunction, args=(arg1, arg2)).start()这会让线程,以及你的类,知道如何开始。您可以使用目标调用函数,也可以使用class.__init__直接调用您的类。重要的是,你不能使用单行词。args参数是可选的。你可以在documentation中阅读更多关于线程的内容,或者直接问我。
Chris Fowl,Sincerly
https://stackoverflow.com/questions/57595159
复制相似问题