首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让我的线程在Python中运行?

如何让我的线程在Python中运行?
EN

Stack Overflow用户
提问于 2019-10-08 09:46:21
回答 3查看 53关注 0票数 1

我可以用我的代码调用类实例,但似乎不能将其转换为多线程。它只是看起来线程没有启动,即使它们是活动的。

我已经阅读了关于线程的文档,尝试使用super(),等等。

代码语言:javascript
复制
#!/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)

输出为:

代码语言:javascript
复制
<bound method Thread.is_alive of <Dashboard(Thread-1, stopped 123145347162112)>>
<bound method Thread.is_alive of <Dashboard(Thread-2, stopped 123145347162112)>>
EN

回答 3

Stack Overflow用户

发布于 2019-10-08 09:53:30

您没有向超类构造函数提供任何参数,这意味着目标是None

假设在调用screen1.start()时,您希望执行instance()方法,请尝试如下所示:

代码语言:javascript
复制
super().__init__(target=self.instance)

此外,您可能希望调用is_alive方法,而不是打印其签名。

票数 0
EN

Stack Overflow用户

发布于 2019-10-08 09:54:12

您需要调用is_alive方法:

代码语言:javascript
复制
 print(screen1.is_alive())

此外,您没有在Thread子类Dashboard中覆盖run,因此当调用start时,它们什么也不做。也许您希望运行instance,如果是这样,那么将其命名为run

代码语言:javascript
复制
def run(self):

或者让run给它打电话。

票数 0
EN

Stack Overflow用户

发布于 2019-10-09 11:10:30

我想通了。我只需要将def instance:重命名为def run:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58279182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档