求会多线程的大佬给点思路!感谢
是这样的,我用PySimpleGui 写了一个界面.我想在点击按钮"下载记录"后,后台启动下载脚本,并且下面的控制台能实时输出日志.目前遇到的问题就是点击了"下载记录"程序就处于卡死状态,只能等下载程序跑完,
才会有反应.是因为程序是单线程所导致的吗?有没有大佬能给点思路,
这一块一直没绕明白,感谢了!!{:5_100:} {:5_100:} {:5_100:} 疾风怪盗 发表于 2020-8-25 15:07
为什么你有回帖奖励。。。。。。。
这个是随机的,就和中彩票一样,这是我中过最多的,一般是1个2个鱼币 疾风怪盗 发表于 2020-8-25 15:27
不会的吧,我之前做的爬虫也没卡死,只不过运行时不能操作界面,其他程序还是可以运行的,之后做过一个有 ...
不会吗? 本帖最后由 Cool_Breeze 于 2020-8-25 19:10 编辑
https://fishc.com.cn/thread-176988-1-1.html
线程.setDaemon(True)# 主程序退出结束,不然容易造成线程hang Twilight6 发表于 2020-8-25 15:35
这就是阻塞界面,你代码运行速度快就不会感觉卡
而且开多进程不需要你说开 N 个,这里只需要将楼 ...
{:5_108:}
还是解决楼主的问题吧,多进程多线程我会的,起码会抄代码
我碰到的多进程的问题,我用pyside2做的图形界面,网上找了,说是多进程必须放在if __name__ == "__main__"这里运行,否则就会出现多开卡死的问题,所以改用了多线程,就没事 疾风怪盗 发表于 2020-8-25 15:27
不会的吧,我之前做的爬虫也没卡死,只不过运行时不能操作界面,其他程序还是可以运行的,之后做过一个有 ...
这就是阻塞界面,你代码运行速度快就不会感觉卡
而且开多进程不需要你说开 N 个,这里只需要将楼主下载的那代码开个线程足以
你试试这个代码:
from tkinter import *
def show():
print('执行程序计算中...')
i = 100000000
while i:
i -= 1
print(i)
root = Tk()
Button(root,text='执行程序',command = show).pack()
mainloop()
然后试试这个多线程:
from tkinter import *
from threading import Thread
def show():
def func():
i = 100000000
while i:
i -= 1
print(i)
t = Thread(target=func)
t.start()
print('执行程序计算中...')
root = Tk()
Button(root,text='执行程序',command = show).pack()
mainloop()
哪个会卡死?
是不是电脑带不起了,还是什么情况, Twilight6 发表于 2020-8-25 15:14
就是因为单进程会卡死,因为代码执行中 GUI 界面阻塞,必须等待你代码执行结束才会恢复 GUI 运行
不会的吧,我之前做的爬虫也没卡死,只不过运行时不能操作界面,其他程序还是可以运行的,之后做过一个有图形界面的图片识别文字,单进程也就这样,就不过速度慢点,用了多进程,秒开N个进程,那才叫卡死,关也关不掉,改用了多线程才好一点 疾风怪盗 发表于 2020-8-25 14:52
不用多进程多线程,就单进程运行,也不至于卡死状态吧,只是这个程序需要等操作完再执行其他命令,代码发上 ...
就是因为单进程会卡死,因为代码执行中 GUI 界面阻塞,必须等待你代码执行结束才会恢复 GUI 运行
zy88888 发表于 2020-8-25 15:02
都玩到多线程了,高手
为什么你有回帖奖励。。。。。。。{:5_99:} 都玩到多线程了,高手 如果只是你说的,没必要多线程。 不用多进程多线程,就单进程运行,也不至于卡死状态吧,只是这个程序需要等操作完再执行其他命令,代码发上来看看,是不是哪里有问题
代码发上来直接帮你改改看~ 本帖最后由 xiaosi4081 于 2020-8-25 14:46 编辑
import threading
def funcname():
#你的代码
a = threading.Thread(target=funcname)
a.start()
如果需要参数的话:
import threading
def funcname():
#你的代码
a = threading.Thread(target=lambda : funcname())
a.start()
页:
[1]