Python 如何将当前对象引用(self)传递给timeit模块的Timer类?

Python 如何将当前对象引用(self)传递给timeit模块的Timer类?,python,Python,我试图将当前对象引用(即self)传递给timeit模块的Timer类,但不知何故,我不知道该如何做。我试图在timeit文档中找到它,但找不到它。我已将我的代码附在这个问题上 from timeit import Timer import time import math class PollingDemo(Thread): def __init__(self): pass def looper(self): while 1:

我试图将当前对象引用(即self)传递给timeit模块的Timer类,但不知何故,我不知道该如何做。我试图在timeit文档中找到它,但找不到它。我已将我的代码附在这个问题上

from timeit import Timer
import time  
import math

class PollingDemo(Thread):

    def __init__(self):
        pass

    def looper(self):

        while 1:
            try:
                T = Timer("self.my_func()")
                #T = Timer("polling.my_func()", "from __main__ import polling")
                time_elapsed = T.timeit(1)

                if math.ceil(time_elapsed) == 1:
                    print "Process is sleeped for 1 sec"
                    time.sleep(1)

            except KeyboardInterrupt:
                return

    def my_func(self):
        pass

if __name__ == '__main__':

    polling = PollingDemo()
    polling.looper()  
在本例中,我尝试通过计时器类timeit()方法调用轮询Demo类的_func()方法,但我得到了“NameError:global name'self'未定义”错误。如果我们试图通过main访问该对象,它会正常工作(下一条注释行正常工作)。有人能问一下为什么这种行为如此。

提前感谢。

不要使用字符串,计时器也接受可调用项,所以直接传递绑定到self的引用,即

T = Timer(self.my_func)
(只是参考,不要叫它)


如果您需要更复杂的设置,请再次将其包装在函数或方法中并传递该方法。

不要使用字符串,计时器也接受可调用项,因此直接传递绑定到self的引用,即

T = Timer(self.my_func)
(只是参考,不要叫它)


如果需要更复杂的设置,请再次将其包装在函数或方法中并传递该方法。

如果需要传递参数,只需使用functools中的部分:

import functools
import timeit

def printme(msg):
    print msg

print "Timing: %f" % timeit.timeit(functools.partial(printme, "Hello world"))

如果需要传递参数,只需使用functools中的部分参数:

import functools
import timeit

def printme(msg):
    print msg

print "Timing: %f" % timeit.timeit(functools.partial(printme, "Hello world"))

若你们能告诉我,当我们把字符串传递给Timer类时,内部会发生什么事情,那个就太好了,或者任何关于它的参考都将不胜感激Thanks字符串是在它自己的独立上下文中计算的(您不能提供局部变量或全局变量)。'“自我”将根本不可用。这意味着字符串(可以选择其设置字符串)必须是自包含的,并定义/介绍所有必要的内容。Ivo如果您能告诉我当我们将字符串传递给Timer类时内部会发生什么情况,那将是非常好的,或者我们将非常感谢您提供有关它的任何参考。-Thanks字符串是在它自己的独立上下文中计算的(您不能提供局部变量或全局变量)。'“自我”将根本不可用。这意味着字符串(可选地带有设置字符串)必须是自包含的,并定义/引入所有必要的内容。