Python 超时装饰器-是否可以在Windows上禁用或使其工作?

Python 超时装饰器-是否可以在Windows上禁用或使其工作?,python,linux,windows,selenium,Python,Linux,Windows,Selenium,我们为Chrome、Firefox和Safari开发扩展,并使用Selenium测试我们的Chrome和Firefox扩展。我最近添加了timeout\u decorator,如果测试运行超过15分钟(你可以看到我的答案),它可以在Linux(Ubuntu)上运行。但问题是,它在Windows上不起作用。这是我的密码: import timeout_decorator .... class BaseSeleniumTestCase(unittest.TestCase): .... @ti

我们为Chrome、Firefox和Safari开发扩展,并使用Selenium测试我们的Chrome和Firefox扩展。我最近添加了
timeout\u decorator
,如果测试运行超过15分钟(你可以看到我的答案),它可以在Linux(Ubuntu)上运行。但问题是,它在Windows上不起作用。这是我的密码:

import timeout_decorator
....
class BaseSeleniumTestCase(unittest.TestCase):
....
    @timeout_decorator.timeout(seconds=900)
    def _test_gmail_1_with_extension(self):
    ....

测试类从
BaseSeleniumTestCase
继承并运行测试。每次在Windows中运行测试之前,我都可以对decorators进行注释,但是我希望有一个更好的解决方案,而不需要创建不同的测试。但是可以调用另一个函数来检查我们是在Windows还是Linux中,如果我们在Windows中,它将在没有decorator的情况下运行测试,而在Linux中,它将应用decorator并运行测试。有什么建议吗?

您可以重新定义
超时\u decorator
以接受相同的签名并在windows上提供禁止操作:

import os

if os.name == 'nt':
    # We redefine timeout_decorator on windows
    class timeout_decorator:
        @staticmethod
        def timeout(*args, **kwargs):
            return lambda f: f # return a no-op decorator
else:
    import timeout_decorator

class BaseSeleniumTestCase(unittest.TestCase):
    ... # Keep your class intact

您需要检查
timeout\u decorator
的内部实现。它很可能使用线程,而这些线程在Windows上的行为不同。然后看一看Windows系统编程,试着弄清楚是否可以取消线程。只是猜测而已。@Mikkoohtama他们有两个选择,但都不能在Windows上工作。我只想在没有decorator的情况下在Windows上运行测试。