仅依靠时间同步两个远程程序(Python)

时间:2013-12-11 11:11:17

标签: python linux networking python-2.7 synchronization

我有两个程序,S和D,用Python 2.7编写,在单独的机器上运行,都是linux。

目标是将文件(换句话说,位)从S传递到D,通过仅称为T的第三方服务器,它们之间没有任何接触,除了我写S和D的事实(并且可以计划任何我想要的协议。)

T是一个简单的echo服务器,它只是发回它收到的消息。

这个想法是将每个位编码为一个数字,并提升T的IP_ID字段。 因此,如果S想要将第1位传递给D,并且假设我将1编码为+30作为IP_ID值,那么我将向T发送30个空包,只是为了将其IP_ID值增加30.D正在向T发送数据包偶尔检查一下IP_ID字段是否增加,以便将增量解码到相关位,1或0.所以现在D会看到IP_ID增加了30,它会写入位1,所以上。

这是我的问题:

如何同步/计时S和D?

我想,例如,从S到T每1秒写一次。

现在,D知道S每隔1秒写一次消息,所以它会知道检查这些间隔之间的IP_ID值。

我只能使用模块“时间”进行同步。

我意识到让S睡眠1秒而D睡眠1秒不起作用,因为S循环涉及比D更多的操作,所以一段时间之后定时会搞砸,当D检查时S将写入T值。

所以我根据播放时间编写了自己的函数,但它仍然不起作用:

S代码:

省略

D代码:

省略

这种同步化由于某种原因不起作用,D正在弄乱S(当S写入T时D读取)。

有任何想法,准确的睡眠功能有什么问题吗?也许其他方法来检查时间?

p.s用busyWait函数代替“sleep”,似乎更准确,但还不够。

1 个答案:

答案 0 :(得分:1)

您可能需要考虑实施I2C1-Wire。这些实际上可能提供比您需要的更多功能,因为它们都是单主/多从总线系统,听起来您只有两个设备。如果你不介意额外的复杂性,他们仍然可以完成工作。

我希望您将引脚设置为高电平或低电平可以分别递增共享计数器或不递增它。

要解决时钟失步问题,您可能还需要考虑使用clock recovery系统,例如TMDS。这是一个研究得很好的领域,因为它被许多现代视频系统用于极其广泛的部署。