我的小型python应用运行缓慢。可能存在瓶颈?

问题描述 投票:0回答:1

很抱歉这个新手问题。

我刚刚使用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()
python beautifulsoup stock pysimplegui
1个回答
1
投票

原因可能是它正在等待所有输入,因此它正在减慢速度。添加submit按钮,并通过按下按钮检索数据并返回到事件循环。github demo program这里有很多示例供您参考。

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()
© www.soinside.com 2019 - 2024. All rights reserved.