python threading模块中的timer_python – 扩展threading.Timer从函数返回值给出了TypeError...

我试图扩展threading.Timer所以我可以从函数中获取返回值.我使用了this thread的解决方案并应用了修改(因为Timer()已经采用* args和** kwargs我认为我不需要再通过__init__).代码完全如下:

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

from storage import *

File "/home/mei/tmwAthena/manamarket/storage.py", line 13, in

from utils import ItemDB

File "/home/mei/tmwAthena/manamarket/utils.py", line 142, in

class CustomTimer(Timer):

TypeError: Error when calling the metaclass bases

function() argument 1 must be code, not str

我不明白这个错误,因为function()非常简单,它收到* self.args和** self.kwargs,我无法看到它在哪里寻找一个字符串,因为初始化器几乎是相同的超类.请注意,这是在导入类时发生的,它甚至没有被代码使用.

解决方法:

你得到的错误是因为Timer不是一个类,它是Python 2中的一个函数/方法threading.py:

>>> from threading import Timer

>>> type(Timer)

具体类是_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.

标签:python,multithreading,python-2-x

来源: https://codeday.me/bug/20190623/1275435.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值