网络同步字典。
netmem的Python项目详细描述
python中跨网络的基本内存同步。
此包有一个运行 在asyncio事件循环上。它支持绑定到 类似于tk.Variable()的字典,并且也兼容 使用tkinter及其事件循环。
安装
最简单的方法是打开您喜爱的终端并键入
pip install netmem
或者,您可以克隆此repo并使用
python setup.py install
要求
- 令人惊叹的aiohttp库
- python v3.5+
netmem的基础是异步IO和事件循环,因此 向python v2.x用户道歉,并就此向python v3.4道歉。 尽管python v3.4支持asyncio,但我真的很喜欢 v3.5中引入的async for和async with结构, 我在很多地方都用过。因为python已经启动了 在撰写本文的时候,我并不觉得太糟糕 留下3.4版。
用法
这是我能想到的最小的有意义的例子。 在同一网络上的两台不同的计算机上运行它。
import tkinter as tk import netmem def main(): print("Run this on two different computers.") mem = netmem.NetworkMemory() mem.connect_on_new_thread(netmem.UdpConnector(local_addr=("225.0.0.1", 9991))) tk1 = tk.Tk() lbl = tk.Label(tk1, text="Favorite operating system:") lbl.pack() txt = tk.Entry(tk1, textvariable=mem.tk_var("fav_os")) txt.pack() tk1.mainloop() if __name__ == "__main__": main()
可以将侦听器绑定到NetworkMemory对象,以便在 值会更改,例如当更新通过网络到达时。听众 工作方式类似于下面的代码片段。
def memory_changed(netmem_dict, key, old_val, new_val) print("Update {}:{}".format(key, new_val)) def main(): mem = netmem.NetworkMemory() mem.add_listener(memory_changed) mem["foo"] = "bar"
其输出如下
Update foo:bar
顺便说一下,底层的BindableDict类本身就非常方便, 甚至没有网络同步功能。
数据结构
NetworkMemory子类是一个python字典,因此您可以访问 它里面的数据就像你做任何字典对象一样。另外你可以 将侦听器绑定到NetworkMemory(因为它实际上是 可绑定字典,这是我从其他代码中借用的 我写道)。