实时将变量从python传递到C的最佳方法
我有一个用C语言创建的媒体播放器,它在Python中的服务器旁运行。服务器接受命令来修改驻留在SQLite数据库中的播放列表 一旦python代码更新了数据库(这在媒体播放器播放时发生在后台),它需要让播放器知道数据库中有一个新的播放列表,以便开始播放新文件 我打算在DB中设置一个标志,玩家可以不断地轮询这个标志,但我认为这不是最好的方式。我能想到的所有选项都涉及到媒体播放器不断地检查一些东西实时将变量从python传递到C的最佳方法,python,c,variables,media-player,Python,C,Variables,Media Player,我有一个用C语言创建的媒体播放器,它在Python中的服务器旁运行。服务器接受命令来修改驻留在SQLite数据库中的播放列表 一旦python代码更新了数据库(这在媒体播放器播放时发生在后台),它需要让播放器知道数据库中有一个新的播放列表,以便开始播放新文件 我打算在DB中设置一个标志,玩家可以不断地轮询这个标志,但我认为这不是最好的方式。我能想到的所有选项都涉及到媒体播放器不断地检查一些东西 最好的方法是什么?有很多方法可以做到这一点: 信号-从Python向播放器发送SIGUSR1信号 套接
最好的方法是什么?有很多方法可以做到这一点:
mkfifo
。以这种方式创建的文件与套接字类似有很多方法可以做到这一点:
mkfifo
。以这种方式创建的文件与套接字类似?@JakobBowyer:redis很难与媒体播放器捆绑在一起,只是为了将一点数据从程序a传输到程序B,特别是当有更简单的方法时。如果您使用linux@DietrichEpp我将twisted捆绑到我写的IDE中?@JakobBowyer:redis很难与媒体播放器捆绑在一起,只是为了将一点数据从程序a传输到程序B,特别是当有更简单的方法时。如果您使用linux@DietrichEpp我将twisted捆绑到我编写的IDE+1中,这也是一个很好的说明,它也是一种优雅的消息传递方式,您有额外的奖励
redis
:)redis
如果您有更复杂的情况,它是有意义的(即,多个播放器和多个Python脚本)或者您已经在使用redis
进行其他操作。在这种情况下,由于实现起来要复杂得多(正确配置redis
可能需要比完整的UPD或信号实现更多的时间)而且更难维护。而且这看起来像桌面解决方案,所以您可能不想安装redis
(作者甚至不想安装DB server,而是使用SQLite).Unix域套接字可能比UDP套接字稍微容易一些,因为您不必选择端口号,而且它们保证了传输。代码几乎是一样的。@DietrichEpp Unix套接字:优点-更快,无需选择端口,保证传输,缺点-您必须处理播放器未运行时的情况,您需要要将套接字放入的目录(/tmp很好,但并不完美),您必须管理权限,无法轻松地移动到Windows,您必须在Python尝试连接之前创建套接字。IMO:UDP对初学者来说更容易,unix套接字更优雅。它将只在Debian ARM上运行。您能给出unix套接字方法的示例/链接吗?+1,这也很好地提及,它也是消息pa的优雅方式如果你有更复杂的情况(即多个玩家和多个Python脚本),或者你已经在使用redis
,那么你就有了奖金redis
:)redis
。在这种情况下,它的超调,因为它的实现要复杂得多(正确配置redis
可能需要比完整的UPD或信号实现更多的时间),并且更难维护。另外,这看起来像桌面解决方案,所以您可能不想安装redis(作者甚至不想安装DB server,而是使用SQLite)。Unix域套接字可能比UDP套接字稍微容易一些,因为您不必选择端口号,而且它们保证了交付。代码几乎是一样的。@DietrichEpp unix套接字:优点-更快,无需选择端口,保证交付,缺点-您必须处理播放器未运行时的情况,您需要将套接字放入目录(/tmp很好,但并不完美),您必须管理权限,无法轻松移动到Windows,在Python尝试连接之前,必须先创建套接字。IMO:UDP对于初学者来说更容易,unix套接字更优雅。它将只在Debian ARM上运行。您能给出unix套接字方法的示例/链接吗?
sock = socket.socket()
sock.connect(('localhost', 9999))
sock.sendall('update')
sock.close()