我有一个循环守护线程从Web套接字接收数据,用值更新dict()。守护进程必须不断运行更新以实时保存数据。但是,我的其他线程(不同于1-15个其他线程或进程)只需要定期更新。如何从守护程序线程获取dict()并定期将dict()分发给许多其他线程或进程?有没有一种简单的方法可以做到这一点我想念?提前谢谢。
我的示例代码使用锁不可靠地为dict提供一个线程:
import time
import threading as t
from datetime import datetime
def updater(mydict,period,m):
while True:
# Continualy updates data to dict from websocket here
data = int(str(datetime.now())[17:19]) # Test Data
# Every 5 seconds: updates manager dict (unreliable)
if int(str(datetime.now())[17:19])%period == 0:
mydict['data'] = data
m.release()
time.sleep(1)
def calculator(mydict,period,m):
# Every loop calls fresh data and does calculations
while True:
m.acquire()
data = mydict
# Calculations here.
# Printing test code here.
print ("Time: ", int(str(datetime.now())[17:19]))
print ("Data: ", data)
time.sleep(period)
if __name__ == '__main__':
m = t.Lock()
m.acquire()
dict = {}
period = 5
bot_process = t.Thread(target= updater, args= (dict,period,m))
update_process = t.Thread(target= calculator, args= (dict,period,m))
update_process.daemon = True
update_process.start()
bot_process.start()
要使代码工作,这意味着计算器会有一对一更新程序,但我希望所有计算器只有一个更新程序。
答案 0 :(得分:0)
看起来你的calculator
函数只是来自dict的读取,而不是写入它。这对于你想要的多个线程来说应该是绝对正确的。在这种情况下,您可以完全取消锁定。
但是,如果你想寻求更成熟的解决方案;我建议考虑使用数据库。 updater
可以在表格中创建条目,calculator
可以对其进行操作。数据库引擎意味着同时被许多连接使用,同时保持一致,所以问题现在已经无法掌握。