【发布时间】:2018-10-11 00:57:26
【问题描述】:
假设我有两个使用线程的类
class foo(threading.Thread):
def __init__(self):
threading.Thread.__init__(self,name="foo=>bar")
self.var1 = {}
def run(self):
while True
value, name = getvalue() // name is an string
self.var1[name] = value
bar(self)
class bar(threading.Thread):
def __init__(self,fooInstance):
threading.Thread.__init__(self,name="bar")
def run(self):
while True
arg = myfunction() // somefunction (not shown for simplicity)
val = myOtherfunction(fooInstance.var1[arg]) //other function
print(val)
f = foo()
f.start()
foo 中的变量var1 会随着时间而变化,bar 需要注意这些变化。这对我来说很有意义,但我想知道这里是否有一些基本的东西最终可能会失败。这在 python 中正确吗?
【问题讨论】:
-
您的代码过于简单,无法正常工作。它有(太多)问题。请edit您的问题并提供一个最小的可运行示例或更接近的示例。
-
一般来说,在并发编程中,您经常需要使用
Lock或Semaphore之类的东西来确定在任何给定时间只有一个线程/进程可以访问共享资源。在这种情况下,fooInstance可能需要它。 -
如果您想明确传递数据而不是共享数据,通常的答案是
queue.Queue(或其变体之一)。 -
也许将
var1设为模块级字典并在 foo 更改它时使用锁。它是否需要对实例是唯一的? -
如果你想共享数据:有一组特定的操作在 CPython 中一直是原子的,并且可能永远都是原子的,即使它们不能保证——包括更新单个内置
dict的键值。但无论如何我都会使用锁,除非它会导致性能问题。
标签: python multithreading class parameter-passing