Python线程没有与selenium并发运行

时间:2017-06-30 00:57:45

标签: python multithreading selenium

我使用ttk在树视图小部件中记录信息。从树视图的每个条目中的信息,我试图将其传递给使用selenium web驱动程序来自动执行用户操作的函数。访问网页的功能同时运行非常重要。

def startTasks(click):
    tasks = tv4.get_children() #the tasks logged in the treeview
    for item in tasks:  
        taskInfo = tv4.item(item)
        thread = Thread(target=masterFunction, args=(taskInfo,))
        thread.start()
        thread.join()

主要功能如下

def masterFunction(task):
    foo = {'site': task['text'], 'user': task['values'][0], 'pass':  task['values'][1], 'size':  str(task['values'][3])
        , 'link':  task['values'][2], 'proxy':  task['values'][4]}

    if (foo['site'] == 'site 1'):
        site1(foo)
    if (foo['site'] == 'site 2'):
       site2(foo)
    if (foo['site'] == 'site 3'):
        site3(foo)
    if (foo['site'] == 'site 4'):
        site4(foo)
    if (foo['site'] == 'site 5'):
        site5(foo)
    if (foo['site'] == 'site 6'):
       site6(foo)
    if (foo['site'] == 'site 7'):
        site7(foo)

被称为' siteX'是使用selenium web驱动程序执行进程的简单函数。当我希望它们同时运行时,如何解决只有1个驱动程序顺序运行的问题?

1 个答案:

答案 0 :(得分:1)

对我来说似乎问题就是这一行 - thread.join():这会导致你的程序等待线程结束执行,因此你的程序不会同时运行。删除此行。

但是,如果您不希望线程强行关闭,那么当您的主线程(主python程序)结束时,您应该使用thread.join方法。这会告诉你的程序等待它们完成。

另外,如果我建议:

functions_dict = {'site 1': site1, 'site 2': site2, 'site 3': site3....}
functions_dict[foo['site']]()

这会保存所有ifs。