python - 我的小型 python 应用程序运行有点慢。可能的瓶颈?
问题描述
抱歉,伙计们提出了这个非常新奇的问题。
我刚刚使用 PySimpleGUI 和 BeautifulSoup 创建了一个小程序,它从 TMXMoney 网站读取实时股票。我知道这很糟糕,但我对 Python 很陌生(实际上这是我的第一个程序)。
不幸的是,我的程序运行有点慢。当我 CMD + Tab 到浏览器并返回我的应用程序时,需要几秒钟才能完成。
我知道我可能有一些代码阻碍了整个程序,所以我想知道是否有人可以帮助我确定那个瓶颈是什么?
这是代码:
import PySimpleGUI as sg
import time
import bs4
import requests
def parsePrice(sym):
r = requests.get("https://web.tmxmoney.com/quote.php?qm_symbol=" + sym) #Canadian stocks source (TSX)
soup = bs4.BeautifulSoup(r.text,"html.parser")
try:
price = soup.find("div", {"class":"labs-symbol"}).find("span", {"class":"price"}).find("span").text
return price
except:
return "Cannot find"
sg.theme('DarkBrown1')
layout = [[sg.Input(key="i1",font=('Helvetica', 20),size = (10,0)), sg.Text("0.00",size=(6,0), font=('Helvetica', 20), key="o1")],
[sg.Input(key="i2",font=('Helvetica', 20),size = (10,0)), sg.Text("0.00",size=(6,0),font=('Helvetica', 20), key="o2")],
[sg.Input(key="i3",font=('Helvetica', 20),size = (10,0)), sg.Text("0.00",size=(6,0),font=('Helvetica', 20), key="o3")],
[sg.Input(key="i4",font=('Helvetica', 20),size = (10,0)), sg.Text("0.00",size=(6,0),font=('Helvetica', 20), key="o4")],
[sg.Input(key="i5",font=('Helvetica', 20),size = (10,0)), sg.Text("0.00",size=(6,0),font=('Helvetica', 20), key="o5")],
[sg.Input(key="i6",font=('Helvetica', 20),size = (10,0)), sg.Text("0.00",size=(6,0),font=('Helvetica', 20), key="o6")]]
window = sg.Window("TSX Stocks", layout)
while True: # Event Loop
event, values = window.read(timeout=2000)
if event in (None, 'Quit'): # if user closed the window using X or clicked Quit button
break
if values['i1'] is not "":
window['o1'].update(parsePrice(values['i1']))
if values['i2'] is not "":
window['o2'].update(parsePrice(values['i2']))
if values['i3'] is not "":
window['o3'].update(parsePrice(values['i3']))
if values['i4'] is not "":
window['o4'].update(parsePrice(values['i4']))
if values['i5'] is not "":
window['o5'].update(parsePrice(values['i5']))
if values['i6'] is not "":
window['o6'].update(parsePrice(values['i6']))
time.sleep(1)
window.close()
解决方案
原因可能是因为它正在等待所有输入而变慢。添加按钮并通过submit
按下它来检索数据并返回到事件循环。
github 演示程序这里有很多例子供大家参考。
import PySimpleGUI as sg
import time
import bs4
import requests
def parsePrice(sym):
r = requests.get("https://web.tmxmoney.com/quote.php?qm_symbol=" + sym) #Canadian stocks source (TSX)
soup = bs4.BeautifulSoup(r.text,"html.parser")
try:
price = soup.find("div", {"class":"labs-symbol"}).find("span", {"class":"price"}).find("span").text
return price
except:
return "Cannot find"
sg.theme('DarkBrown1')
layout = [[sg.Input(key="i1",font=('Helvetica', 20),size = (10,0)), sg.Submit(key='-sym1-'), sg.Text("0.00",size=(6,0), font=('Helvetica', 20), key="o1")],
[sg.Input(key="i2",font=('Helvetica', 20),size = (10,0)), sg.Submit(key='-sym2-'), sg.Text("0.00",size=(6,0),font=('Helvetica', 20), key="o2")],
[sg.Input(key="i3",font=('Helvetica', 20),size = (10,0)), sg.Submit(key='-sym3-'), sg.Text("0.00",size=(6,0),font=('Helvetica', 20), key="o3")],
[sg.Input(key="i4",font=('Helvetica', 20),size = (10,0)), sg.Submit(key='-sym4-'), sg.Text("0.00",size=(6,0),font=('Helvetica', 20), key="o4")],
[sg.Input(key="i5",font=('Helvetica', 20),size = (10,0)), sg.Submit(key='-sym5-'), sg.Text("0.00",size=(6,0),font=('Helvetica', 20), key="o5")],
[sg.Input(key="i6",font=('Helvetica', 20),size = (10,0)), sg.Submit(key='-sym6-'), sg.Text("0.00",size=(6,0),font=('Helvetica', 20), key="o6")],
[sg.Quit()]]
window = sg.Window("TSX Stocks", layout)
while True: # Event Loop
event, values = window.read()
print(event, values)
if event in (None, 'Quit'): # if user closed the window using X or clicked Quit button
break
if event == '-sym1-':
symbol = values['i1']
price = parsePrice(symbol)
window['o1'].update(price)
if event == '-sym2-':
symbol = values['i2']
price = parsePrice(symbol)
window['o2'].update(price)
if event == '-sym3-':
symbol = values['i3']
price = parsePrice(symbol)
window['o3'].update(price)
if event == '-sym4-':
symbol = values['i4']
price = parsePrice(symbol)
window['o4'].update(price)
if event == '-sym5-':
symbol = values['i5']
price = parsePrice(symbol)
window['o5'].update(price)
if event == '-sym6-':
symbol = values['i6']
price = parsePrice(symbol)
window['o6'].update(price)
# time.sleep(1)
window.close()
推荐阅读
- angular - 角度 HTTP 响应乱序
- scala - scala 找不到 java.sql.Date 我不知道为什么
- cookies - 在用户的所有浏览器之间共享
- karate - 空手道:迭代Url支持分页是否可行
- javascript - 如何重新编号 Landsat 8 波段以便我可以与 Landsat 4-7 图像合并?
- flutter - 颤振导航栏未选择的文本颜色未显示
- java - 如何在反应式 Spring Security OAuth2 中信任自定义证书?
- javascript - 从 Xrm.Page 删除后表单中托管的 WebResource 从上下文访问
- sql - 优化案例表达式
- docker - 詹金斯 - 码头工人:找不到命令