当前位置: 首页 > 面试题库 >

重写python threading.Thread.run()

乌灿
2023-03-14
问题内容

鉴于Python文档为Thread.run()

您可以在子类中重写此方法。标准的run()方法调用传递到对象构造函数的可调用对象作为目标参数(如果有),并分别从args和kwargs参数中获取顺序和关键字参数

我构造了以下代码:

class DestinationThread(threading.Thread):
    def run(self, name, config):
        print 'In thread'

thread = DestinationThread(args = (destination_name, destination_config))
thread.start()

但是当我执行它时,出现以下错误:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 522, in __bootstrap_inner
    self.run()
TypeError: run() takes exactly 3 arguments (1 given)

似乎我缺少明显的东西,但是我看到的各种示例都可以使用此方法。最终,我尝试将字符串和字典传递给线程,如果构造方法不是正确的方法,而是在启动线程之前创建了一个新函数来设置值,那我很乐意。

关于如何最好地做到这一点的任何建议?


问题答案:

您确实不需要继承Thread。API支持此功能的唯一原因是让来自Java的人们感到更加舒适,而这是理智地做到这一点的唯一方法。

我们建议您使用的模式是将方法传递给Thread构造函数,然后调用.start()

 def myfunc(arg1, arg2):
     print 'In thread'
     print 'args are', arg1, arg2

 thread = Thread(target=myfunc, args=(destination_name, destination_config))
 thread.start()


 类似资料:
  • 问题内容: 在AppConfig类的代码中,我们可以看到: 好吧,这是我的例子: my_app / apps.py 我只想使现成的方法起作用。也就是说,当Django找到my_app时,让它运行ready方法。 该应用已在INSTALLED_APPS中注册。 我执行’python manage.py runserver’。并没有打印任何内容。 如果我在ready方法中放置一个断点,则调试器不会在那

  • "The great thing about mod_rewrite is it gives you all the configurability and flexibility of Sendmail. The downside to mod_rewrite is that it gives you all the configurability and flexibility of Send

  • 请参考:http://www.kancloud.cn/manual/thinkphp/1866

  • 问题内容: 基本上,这就是我要实现的目标。 classname @ address(?)[原始],对象的名称,对象的年龄 问题,被递归调用。 我不能打电话,因为那不是我想要的。我想叫原件。 这个 由于明显的原因而无法正常工作。 我已经精疲力竭了,一旦方法被重写,可以做到这一点吗?即所谓的原始实现? (我的编辑)基本上,我需要的是:覆盖toString以显示’this’对象的两个属性,并且我也想让’

  • Apache 提供了基于正则表达式规则动态修改传入的请求的 URL 的方法。这用于以自己喜欢的任意方法映射任意 URL 到你的内部 URL 结构。 它支持无限的规则,以及为每个规则附加条件,从而提供了一个真正灵活且强大的 URL 操作机制。URL 操作可以依赖于各种测试,例如服务器变量,环境变量,HTTP 头,时戳,甚至外部数据库查询等,以便完成 URL 单元匹配。 这个模块在服务器上下文 (),

  • subA类是A类的子类。我试图重写一个方法,但不知怎的,它不允许我重写它。为什么会这样?是因为参数中的参数吗? 读取错误消息: 名称冲突:subA中的add(E#1)和A中的add(E#2)具有相同的擦除,但两者都不重写另一个,其中E#1、E#2是类型变量: E#1扩展了subA类中声明的对象 E#2扩展了A类中声明的对象 超类A: 子类subA: