【问题标题】:Python - Call variable from function using args with threadingPython - 使用带线程的 args 从函数调用变量
【发布时间】:2020-10-18 22:08:15
【问题描述】:

使用 selenium 一起计算 2 个整数, 但是一次处理一个webdriver太慢的问题。

我想知道如何同时运行这两个函数..

我运行脚本的文件很少:

extra.py

    from selenium import webdriver
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.ui import WebDriverWait
from config import *


def horizon_loginbhb():
    browser1 = webdriver.Chrome()
    browser1.get('https://forums.gamers-israel.co.il/')
    WebDriverWait(browser1, 10).until(ec.title_contains("בית"))
    browser1.find_element_by_id('lnkLoginSignupMenu').click()
    browser1.find_element_by_name('username').send_keys(config['Login']['Username'])
    browser1.find_element_by_name('password').send_keys(config['Login']['Password'])
    browser1.find_element_by_xpath('//*[@id="vb-page-body"]/nav/div/ul/li/div/ul/li[1]/div/form/div[3]/button').click()
    first = browser1.find_element_by_xpath('//*[@id="forum21"]/td[2]').text
    var1 = int(first.splitlines()[0])

    browser1.close()

    return var1


def horizon_loginsrq():
    browser2 = webdriver.Chrome()
    browser2.get('https://forums.gamers-israel.co.il/')
    WebDriverWait(browser2, 10).until(ec.title_contains("בית"))
    browser2.find_element_by_id('lnkLoginSignupMenu').click()
    browser2.find_element_by_name('username').send_keys(config['Login']['Username'])
    browser2.find_element_by_name('password').send_keys(config['Login']['Password'])
    browser2.find_element_by_xpath('//*[@id="vb-page-body"]/nav/div/ul/li/div/ul/li[1]/div/form/div[3]/button').click()
    second = browser2.find_element_by_xpath('//*[@id="forum23"]/td[2]').text
    var2 = int(second.splitlines()[0])
    browser2.close()

    return var2

gui.py(这是主文件)

    from tkinter import *
from extra import *
from tkinter import ttk

import threading

lock = threading.Lock()
window = Tk()

window.title("Mosh Counter")

tab_control = ttk.Notebook(window)
tab1 = ttk.Frame(tab_control)
tab2 = ttk.Frame(tab_control)
tab_control.add(tab1, text='First')
tab_control.add(tab2, text='Second')
lbl1 = Label(tab1, text='Current sessions')
lbl1.grid(column=0, row=0)
lbl2 = Label(tab2, text='label2')
lbl2.grid(column=0, row=0)
tab_control.pack(expand=1, fill='both')

def messagecount():
    var1, var2 = horizon_loginbhb(), horizon_loginsrq()
    print(int(var1) + int(var2))
    msg = (int(var1) + int(var2))
    lbl1_2 = Label(tab1, text=msg)
    lbl1_2.grid(column=0, row=2)
    window.after(5000, messagecount)


# run first time
messagecount()

window.mainloop()

我正在为用户和密码使用另一个配置文件(你并不真的需要它们)。 任何想法让它更快,如果你有一些建议可以让代码变得更好,我会很高兴听到?

【问题讨论】:

    标签: python multithreading tkinter


    【解决方案1】:

    使用concurrent.futures模块一起运行函数,得到结果。

    def messagecount():
        import concurrent.futures
        with concurrent.futures.ThreadPoolExecutor() as executor:
            t1, t2 = executor.submit(horizon_loginbhb), executor.submit(horizon_loginsrq)
            var1, var2 = t1.result(), t2.result()
    
        #var1, var2 = horizon_loginbhb(), horizon_loginsrq()
        print(int(var1) + int(var2))
        msg = (int(var1) + int(var2))
        lbl1_2 = Label(tab1, text=msg)
        lbl1_2.grid(column=0, row=2)
        window.after(5000, messagecount)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多