我有一个不断轮询数据的python脚本。剧本不断运行,不应停止。Python - 在运行脚本时更新配置
该脚本从首次运行脚本时传递给它的关键字轨道轮询数据。
什么是最好的方式来更新此轨道不停止来自另一个python脚本的脚本?
我能想到的唯一解决方案是将曲目存储在txt文件中,并检查设置定时器上文件的任何更新。似乎有点凌乱。
我有一个不断轮询数据的python脚本。剧本不断运行,不应停止。Python - 在运行脚本时更新配置
该脚本从首次运行脚本时传递给它的关键字轨道轮询数据。
什么是最好的方式来更新此轨道不停止来自另一个python脚本的脚本?
我能想到的唯一解决方案是将曲目存储在txt文件中,并检查设置定时器上文件的任何更新。似乎有点凌乱。
最好是封装此设置文件的数据库进行通信这两个脚本。一个简单的SQLite DB文件就足够了 - SQLite支持是用Python内置的,所以不需要额外的努力。
数据库的优点是不会遇到部分写入文件等竞争条件。“配置添加”脚本使用事务添加关键字,而从数据库中读取的其他脚本将只会当它完全完成时看到它。请记住,不要在定期脚本中始终打开数据库。每隔一段时间打开一次,阅读关键字并关闭它。
轮询一个配置文件并不是一团糟,而是一个非常常见的解决这个问题的方法。你应该去用它。
根据文件的大小,操作系统/文件系统和其他因素,我认为这是竞争条件的一个配方。我推荐一个简单的数据库,而不是一个普通的文件 – 2011-05-10 11:32:11
@Eli:我同意,这就是为什么我已经upvoted你的答案。 – 2011-05-10 11:34:07
您可以使用套接字
我同意跟踪存储在文件中的数据,然后使用signal module通知您的脚本新的轨迹数据已准备就绪可读,将函数与SIGUSR1联系起来,而且完成了,没有部分写入的风险文件。
在脚本的说:
import signal
signal.signal(signal.SIGUSR1, read_track_data)
然后,(linux的方式,但将在Windows太大的不同)只要发送信号到你的脚本只是更新您的跟踪数据文件之后。
$kill -n 10 PID_OF_YOUR_SCRIPT
我很想看到“没有太大的不同,在Windows”解决方案;-) – 2011-05-10 11:48:52
@Eli:这就是为什么我爱Linux ^^ – neurino 2011-05-10 11:50:02
我也爱Linux,但你应该真的删除这个说法,除非你准备好站在后面it – 2011-05-10 11:50:54
将配置存储为字典,然后转储并通过json加载。 – 2011-05-10 11:50:44