【问题标题】:Get Arguments of Thread Variable获取线程变量的参数
【发布时间】:2015-06-15 17:09:55
【问题描述】:

我有一个非常简单的问题:

myThread = Thread(target=TestTarget, args=(1, Event(),))

是否可以仅使用变量myThread 获取参数?

谢谢!

【问题讨论】:

    标签: python multithreading arguments


    【解决方案1】:

    _Thread__args_Thread__kwargs 存储构造函数的参数。

    但是,正如您可能通过下划线猜到的那样,这些不是公共 API 的一部分。事实上,“损坏的、重命名的属性”是intended to discourage direct access.

    此外,这些属性特定于 CPython 实现。例如,Jython 似乎没有通过这些名称公开这些属性(免责声明:我没有测试,只是看了一眼源代码)。

    在您的情况下,以某种对应用程序有意义的方式将参数存储在 Thread 的子类中并访问它们可能会更好。

    【讨论】:

      【解决方案2】:

      您可以简单地在Thread 对象上使用_Thread__arg 来获取传递给该Thread 对象的参数的详细信息。

      import threading
      
      def TestTarget(a, b):
          pass
      
      myThread = threading.Thread(target=TestTarget, args=(1, 2,))
      
      print myThread._Thread__arg
      
      >>> (1, 2)
      

      【讨论】:

      • 我试过了,但是:AttributeError: 'Thread' object has no attribute '_Thread__arg'
      • 我在 Python2.7 上运行了这段代码,它给出了预期的输出。
      • 天哪?!我复制并粘贴了三遍... print sys.version_info 给了我: sys.version_info(major=2, minor=7, micro=6, releaselevel='final', serial=0)
      • 是的,就好像以_ 开头的变量是私有实现细节! (哎呀,这个甚至以__开头)。
      【解决方案3】:

      在 pilcrows 回答之后 - 我使用这个可行的解决方案:

      from threading import Thread
      
      class myThread(Thread):
      
          args = None
      
          def __init__(self, group=None, target=None, args=(), name=None, kwargs = None, daemon = None):
              self.args = args
              super(RaThread, self).__init__(group=group, target=target, args=args, name=name, kwargs=kwargs, daemon=daemon)
      

      感谢大家的帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-20
        • 2016-10-04
        • 1970-01-01
        • 2023-02-05
        • 1970-01-01
        • 2021-06-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多