Extending threading.Timer for returning value from function gives TypeError(扩展threading.Timer以从函数返回值会导致TypeError)
本文介绍了扩展threading.Timer以从函数返回值会导致TypeError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试扩展threading.Timer,以便可以从函数获得返回值。我使用了this thread中的解决方案并应用了修改(因为Timer()已经接受了*args和**kwargs,我认为我不需要再次传递它)。代码完全是这样的:
from threading import Timer
class CustomTimer(Timer):
def __init__(self):
super(CustomTimer, self).__init__()
self._return = None
def run(self):
super(CustomTimer, self).run()
self._return = self._Thread__target(*self._Thread__args, **self._Thread__kwargs)
def join(self):
super(CustomTimer, self).join()
return self._return
然后我在运行主模块时出现以下错误:
Traceback (most recent call last):
File "main.py", line 43, in <module>
from storage import *
File "/home/mei/tmwAthena/manamarket/storage.py", line 13, in <module>
from utils import ItemDB
File "/home/mei/tmwAthena/manamarket/utils.py", line 142, in <module>
class CustomTimer(Timer):
TypeError: Error when calling the metaclass bases
function() argument 1 must be code, not str
我不理解这个错误,因为函数()非常简单,它接收*self.args和**self.kwargs,我看不出它可能在哪里查找字符串,因为初始化程序与超类的初始化程序几乎相同。请注意,这是在导入类时发生的,甚至代码都不会使用它。
推荐答案
您收到的错误是因为Timer不是一个类,而是函数/方法2threading.py:
>>> from threading import Timer
>>> type(Timer)
<type 'function'>
具体类为_Timer。此外,您的代码确实存在一些问题;您的init缺少参数,并且未设置target、args、kwargs和interval。
您可能会遇到这种情况CustomTimer:
from threading import _Timer
class CustomTimer(_Timer):
def __init__(self, interval, function, args=[], kwargs={}):
self._original_function = function
super(CustomTimer, self).__init__(
interval, self._do_execute, args, kwargs)
def _do_execute(self, *a, **kw):
self.result = self._original_function(*a, **kw)
def join(self):
super(CustomTimer, self).join()
return self.result
演示:
def add_together(a, b):
return a + b
c = CustomTimer(1, add_together, (2, 4))
c.start()
print c.join()
在1秒后打印6。
这篇关于扩展threading.Timer以从函数返回值会导致TypeError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:扩展threading.Timer以从函数返回值会导致TypeError
基础教程推荐
猜你喜欢
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
