【发布时间】:2015-06-15 17:09:55
【问题描述】:
我有一个非常简单的问题:
myThread = Thread(target=TestTarget, args=(1, Event(),))
是否可以仅使用变量myThread 获取参数?
谢谢!
【问题讨论】:
标签: python multithreading arguments
我有一个非常简单的问题:
myThread = Thread(target=TestTarget, args=(1, Event(),))
是否可以仅使用变量myThread 获取参数?
谢谢!
【问题讨论】:
标签: python multithreading arguments
_Thread__args 和 _Thread__kwargs 存储构造函数的参数。
但是,正如您可能通过下划线猜到的那样,这些不是公共 API 的一部分。事实上,“损坏的、重命名的属性”是intended to discourage direct access.
此外,这些属性特定于 CPython 实现。例如,Jython 似乎没有通过这些名称公开这些属性(免责声明:我没有测试,只是看了一眼源代码)。
在您的情况下,以某种对应用程序有意义的方式将参数存储在 Thread 的子类中并访问它们可能会更好。
【讨论】:
您可以简单地在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)
【讨论】:
_ 开头的变量是私有实现细节! (哎呀,这个甚至以__开头)。
在 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)
感谢大家的帮助!
【讨论】: