我使用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个驱动程序顺序运行的问题?
答案 0 :(得分:1)
对我来说似乎问题就是这一行 - thread.join()
:这会导致你的程序等待线程结束执行,因此你的程序不会同时运行。删除此行。
但是,如果您不希望线程强行关闭,那么当您的主线程(主python程序)结束时,您应该使用thread.join
方法。这会告诉你的程序等待它们完成。
另外,如果我建议:
functions_dict = {'site 1': site1, 'site 2': site2, 'site 3': site3....}
functions_dict[foo['site']]()
这会保存所有ifs。