python一个线程里有两个变量,每分钟都会改变,线程外如何每分钟也获取这两个变化的变量
时间: 2024-09-27 09:03:01 浏览: 33
在Python中,如果你想要在主线程中每分钟获取在一个单独线程中不断更新的两个变量,你可以通过共享数据结构和同步机制来实现。一种常见的方式是使用`threading`模块以及`queue.Queue`或者`collections.namedtuple`来传递信息。
**示例1 - 使用Queue(队列)**:
```python
import threading
from queue import Queue
# 创建一个线程局部变量存储
var_queue = Queue()
class UpdateThread(threading.Thread):
def __init__(self):
super().__init__()
self.var1 = 0
self.var2 = 0
def update_variables(self):
for _ in range(60): # 模拟每分钟更新
self.var1 += 1
self.var2 += 1
var_queue.put((self.var1, self.var2)) # 将变量放入队列
# 创建并启动更新线程
update_thread = UpdateThread()
update_thread.start()
def get_updated_variables():
while True:
var1, var2 = var_queue.get() # 获取线程更新的值
print(f"每分钟的变量:var1={var1}, var2={var2}")
# 如果你想控制刷新频率,可以在这里添加适当延迟
time.sleep(60) # 等待一分钟再获取下一次更新
get_updated_variables()
```
**示例2 - 使用namedtuple**:
```python
import threading
import collections
from time import sleep
class UpdateThread(threading.Thread):
def __init__(self):
super().__init__()
self.current_state = collections.namedtuple('State', ['var1', 'var2'])
def run(self):
for _ in range(60):
self.current_state = self.current_state(var1=self.var1 + 1, var2=self.var2 + 1)
# 更新后睡眠一秒,模拟实时变化
sleep(1)
@property
def var1(self):
return self.current_state.var1
@property
def var2(self):
return self.current_state.var2
# 创建并启动线程
update_thread = UpdateThread()
update_thread.start()
def poll_for_updates():
while True:
print(f"每分钟的变量:var1={update_thread.var1}, var2={update_thread.var2}")
sleep(60)
poll_for_updates()
```
这两种方法都能让你在主线程中每分钟获取到变量的变化。注意,由于并发访问,你需要确保在修改共享数据时加锁,以防数据竞争。
阅读全文