如何在Python3中切换装饰器的操作

如何在Python3中切换装饰器的操作,python,multithreading,python-3.x,decorator,Python,Multithreading,Python 3.x,Decorator,我有一个decorator@newthread,它将函数包装为在单独的线程中运行(使用functools中的wrapps和threading中的thread)。但是,有些函数我只希望在某些时候发生这种情况 目前,我有@newthread检查要包装的函数的关键字参数,如果它发现一个boolnew_线程等于True,那么它会在一个单独的线程中运行函数,否则它会正常运行函数。比如说, @newthread def foo(new_thread=False) # Do stuff... fo

我有一个decorator
@newthread
,它将函数包装为在单独的线程中运行(使用
functools
中的
wrapps
threading
中的
thread
)。但是,有些函数我只希望在某些时候发生这种情况

目前,我有
@newthread
检查要包装的函数的关键字参数,如果它发现一个bool
new_线程
等于
True
,那么它会在一个单独的线程中运行函数,否则它会正常运行函数。比如说,

@newthread
def foo(new_thread=False)
     # Do stuff...

foo() # Runs normally
foo(new_thread=True) # Runs in new thread

这是做这件事的标准方法,还是我遗漏了什么?

那么,不要使用
newthread
作为装饰程序。装饰器只是一个接受函数并返回函数的函数

如果希望它在当前线程中运行,请调用

foo(some, params)
newthread(foo)(some, params)
如果要在新线程中运行
foo
,请调用

foo(some, params)
newthread(foo)(some, params)
这很好,但我个人更愿意让decorator使用“new_thread”参数,而不是让它显示在修饰函数的参数列表上

此外,您还可以使用一个“默认”值,这样您就可以从其他地方选择使用不同线程的实际需要(如环境变量):


@凯文:有哪些代码需要审核?
@newthread
实现没有显示,而
foo
的东西都是假设的。或者你可以做
thread\u foo=newthread(foo)
并根据需要使用
foo
thread\u foo
,但我认为你的方法更好。@200\u成功:是的,如果OP真的提供了一些代码来查看,可能会有所帮助。@ArtOfWarfare 1。作为代码审查的主持人,我向您保证,出于上述原因,在代码审查时,此问题将立即结束。2.“因为它属于代码审查”不是将此问题归类为堆栈溢出的非主题的有效理由。有关有效的离题原因列表,请参阅。也请阅读。条件装饰器呢?看见