【发布时间】:2021-03-05 17:38:31
【问题描述】:
我在 Python 中使用线程时遇到了一些问题。
我需要的是:
线程 1
- 启动线程 2,给它 'data' 对象作为参数
- 做一些工作
- 停止线程 2
- 检查结果
线程 2
- 在循环中读取线程 1 的数据
我大致实现为
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”。所以这里显然存在一些内存共享问题。
我的想法是“它只是所有指针”,这似乎不正确。 请问这样做的正确方法是什么?
【问题讨论】:
-
我想你创建了两个
ReaderThread实例然后运行它们。好吧,self指的是实例,每个实例都有自己的状态。因此,很明显,thread1 和 thread2 将有自己的值exit,而不是共享同一个值。 -
@go2nirvana ReaderThread只有一个,我加了一些代码
-
那么您在问题中所说的第二个线程是什么?
-
Thread1 = 主线程,Thread2 = ReaderThread
-
This answer 似乎可以解决您的问题。要么接受它,要么关闭这个问题,因为您的错误似乎是由拼写错误引起的。
标签: python multithreading