我可以通过sqlite在多个python应用程序之间共享信息吗?

我可以通过sqlite在多个python应用程序之间共享信息吗?,python,sqlite,raspberry-pi,Python,Sqlite,Raspberry Pi,我需要创建多个服务器(至少3个)来执行不同的任务,理想情况下,我需要一个能够与它们通信的中央服务器。我看了一下插座,它们似乎超出了我的理解范围。我更喜欢使用每个服务器都可以写入的数据库,它们可以在它们之间交换信息,在消息被执行时设置适当的标志 这是一个将在Raspberry Pi上运行的项目,我希望它尽可能轻量级 我正在考虑使用sqlite3,但不确定这是否是应用程序/流程之间的一种合适的通信形式。python脚本是否可以“侦听”数据库的更改,或者它们是否需要在找到消息之前在循环中阻塞 SQLi

我需要创建多个服务器(至少3个)来执行不同的任务,理想情况下,我需要一个能够与它们通信的中央服务器。我看了一下插座,它们似乎超出了我的理解范围。我更喜欢使用每个服务器都可以写入的数据库,它们可以在它们之间交换信息,在消息被执行时设置适当的标志

这是一个将在Raspberry Pi上运行的项目,我希望它尽可能轻量级


我正在考虑使用sqlite3,但不确定这是否是应用程序/流程之间的一种合适的通信形式。python脚本是否可以“侦听”数据库的更改,或者它们是否需要在找到消息之前在循环中阻塞

SQLite非常适合在进程之间共享信息,尽管我怀疑它的锁定是相当粗粒度的,因此如果进程频繁地进行更新(每秒多次),那么您可能会发现这会影响性能。但是,如果您的进程运行在不同的机器上,那么您需要为它们安排一些共享存储。由于SQLite依赖于文件锁定,像NFS这样的共享文件系统可能会出现问题-请参阅以获取详细信息

MySQL和PostgreSQL都是明智的选择,它们允许通过网络进行连接,并且应该使多台计算机能够更轻松地同时访问数据库,尽管它们需要比SQLite多得多的设置

尽管如此,听起来您真正想要实现的是让进程彼此唤醒,而这类事情对于数据库来说更难实现。通常情况下,您必须频繁地对某个特定值进行轮询,这是一种效率很低的方法。如果您想要一个静态数据存储,那么数据库是很好的,但它们并不能真正取代传统的数据库。如果你不需要发送数据,你也可以考虑使用UDP而不是TCP,更多的是一个“唤醒呼叫”。但是,请记住,UDP并不能保证可靠性,您可能会找到比UDP更多的关于TCP套接字的教程和文档

如果你不习惯使用未加工的插座,你看过吗?它是一个消息传递系统,可以在套接字上运行。它有Python绑定,而且性能非常好。也许这种抽象比处理原始套接字更适合您

最后一点要注意的是,一旦你了解了概念,套接字编程其实并不那么复杂,但它确实有一个相当长的学习曲线,直到你对正在发生的事情感到满意为止。如果您想尝试一下,我建议从Python开始


您将面临的主要复杂性是同时处理多个连接。如果您喜欢使用线程,您可以为每个连接生成一个线程(即,每台机器生成一个线程),或者您可以使用模块的功能将事情保持在同一个线程中,并等待多个连接上发生的事情。

SQLite非常适合在进程之间共享信息,虽然我怀疑它的锁定是相当粗粒度的,所以如果进程进行频繁的更新(每秒多次),那么您可能会发现这会影响性能。但是,如果您的进程运行在不同的机器上,那么您需要为它们安排一些共享存储。由于SQLite依赖于文件锁定,像NFS这样的共享文件系统可能会出现问题-请参阅以获取详细信息

MySQL和PostgreSQL都是明智的选择,它们允许通过网络进行连接,并且应该使多台计算机能够更轻松地同时访问数据库,尽管它们需要比SQLite多得多的设置

尽管如此,听起来您真正想要实现的是让进程彼此唤醒,而这类事情对于数据库来说更难实现。通常情况下,您必须频繁地对某个特定值进行轮询,这是一种效率很低的方法。如果您想要一个静态数据存储,那么数据库是很好的,但它们并不能真正取代传统的数据库。如果你不需要发送数据,你也可以考虑使用UDP而不是TCP,更多的是一个“唤醒呼叫”。但是,请记住,UDP并不能保证可靠性,您可能会找到比UDP更多的关于TCP套接字的教程和文档

如果你不习惯使用未加工的插座,你看过吗?它是一个消息传递系统,可以在套接字上运行。它有Python绑定,而且性能非常好。也许这种抽象比处理原始套接字更适合您

最后一点要注意的是,一旦你了解了概念,套接字编程其实并不那么复杂,但它确实有一个相当长的学习曲线,直到你对正在发生的事情感到满意为止。如果您想尝试一下,我建议从Python开始


您将面临的主要复杂性是同时处理多个连接。如果您喜欢使用线程,您可以为每个连接生成一个线程(即,每台机器一个线程),或者您可以使用模块的功能将事情保持在同一个线程中,等待多个连接上发生的事情。

如果共享的信息不需要持久性,并且您的数据不是高度结构化的,然后你可以考虑使用。它是一个键/值存储,将所有内容都保存在内存中(尽管您可能受i/o限制),并且非常易于使用


另一个选择是使用。它构建在0MQ之上,使服务之间的通信变得容易。它为您抽象了套接字和序列化,其中包括

如果共享的信息不需要持久性,并且数据不具有高度结构化,那么您可以考虑使用。它是一个键/值存储,将所有内容都保存在内存中(尽管