我可以用我的代码调用类实例,但似乎不能将其转换为多线程。它只是看起来线程没有启动,即使它们是活动的。
我已经阅读了关于线程的文档,尝试使用super(),等等。
#!/usr/local/bin/python3
from selenium import webdriver
from threading import Thread
class Dashboard(Thread):
def __init__(self, position, url):
super().__init__()
self.position = position
self.url = url
def instance(self):
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--start-maximized')
chrome_options.add_argument('--window-size=2560,1600')
chrome_options.add_argument(self.position)
self.driver = webdriver.Chrome(options=chrome_options)
self.driver.get(self.url)
screen1 = Dashboard('--window-position=1000,1000', 'https://www.facebook.com')
screen2 = Dashboard('--window-position=1,1', 'https://www.youtube.com')
screen1.start()
print(screen1.is_alive)
screen2.start()
print(screen2.is_alive)输出为:
<bound method Thread.is_alive of <Dashboard(Thread-1, stopped 123145347162112)>>
<bound method Thread.is_alive of <Dashboard(Thread-2, stopped 123145347162112)>>发布于 2019-10-08 09:53:30
您没有向超类构造函数提供任何参数,这意味着目标是None。
假设在调用screen1.start()时,您希望执行instance()方法,请尝试如下所示:
super().__init__(target=self.instance)此外,您可能希望调用is_alive方法,而不是打印其签名。
发布于 2019-10-08 09:54:12
您需要调用is_alive方法:
print(screen1.is_alive())此外,您没有在Thread子类Dashboard中覆盖run,因此当调用start时,它们什么也不做。也许您希望运行instance,如果是这样,那么将其命名为run
def run(self):或者让run给它打电话。
发布于 2019-10-09 11:10:30
我想通了。我只需要将def instance:重命名为def run:
https://stackoverflow.com/questions/58279182
复制相似问题