我在Python中使用线程时遇到了一些问题
我需要的是:
线程1
线程2
我大致实现了
class ReaderThread(threading.Thread)
def __init__(self, data):
super().__init__()
self.data = data
self.exit = False
def run(self):
while not self.exit:
somehow modify self.data
def stop(self):
self.exit = True
self.join()
主线程创建一个ReaderThread实例并调用start(),几秒钟后调用stop()
class MainThread():
def __init__(self):
self.data = set()
self.thread = ReaderThread(self.data)
def function(self):
self.thread.start()
whoptydoo
self.thread.stop()
问题是,thread1并没有真正修改thread2的“exit”变量,thread2(ReaderThread)也没有修改thread1的“data”。因此,这里显然存在一些内存共享问题
我的想法是“这是所有的指针”,这似乎并不正确。 请问正确的方法是什么
您的
RenderThread
类似乎不完整(缺少:
和Thread
初始化)。 一旦完成,您的示例似乎会按预期工作编辑问题中的示例更改后,仍然有效
这里是交易:在
ReaderThread
处有data
字段,在MainThread
处有data
字段。当在ReaderThread
中执行此self.data = smth
时,可以为ReaderThread
字段设置此值,但从不访问MainThread
的任何属性。这两个实例具有相似的命名字段,但它们不相同要实现您想要的,您应该从
ReaderThread.run
返回一个值,或者将MainThread
实例传递给ReaderThread
以便能够修改它。看起来选项2更适合你顺便说一句,仔细看之后,我对你做错了什么有了另一个想法。由于},而不是重新分配它(我怀疑您本可以这样做)
MainThread.data
是一个set()
,因此是可变的-您的代码将按原样工作,但前提是您准确地修改{相关问题 更多 >
编程相关推荐