簡體   English   中英

Python - 使用帶有線程的 args 從函數調用變量

[英]Python - Call variable from function using args with threading

使用selenium一起計算2個整數,但是一次處理一個webdriver太慢的問題。

我想知道如何將這兩個功能一起運行..

我有幾個文件可以從中運行腳本:

額外的.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()

我正在為用戶和密碼使用另一個配置文件(您實際上並不需要它們)。 任何讓它更快的想法,如果你有一些建議讓代碼更好,我會很高興聽到嗎?

使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM