Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何让网络中的N台计算机同时启动活动?_Python_Networking_Distributed_Distributed Computing - Fatal编程技术网

Python 如何让网络中的N台计算机同时启动活动?

Python 如何让网络中的N台计算机同时启动活动?,python,networking,distributed,distributed-computing,Python,Networking,Distributed,Distributed Computing,我正在尝试创建一个分布式应用程序,它要求网络中的所有计算机同时执行一个事件 假设我们有两个长度相等的数组 labels[] = ["label1", "label2", "label3", ...] duration[] = [0.5, 1.2, 0.1, 0.1, 3.0, ...] 我在一个局域网里有一个主人和N个奴隶。假设阵列已复制到所有从属服务器。我现在想要的是,在所有这些机器上运行以下代码 for i in len(labels): print labels[i] sleep

我正在尝试创建一个分布式应用程序,它要求网络中的所有计算机同时执行一个事件

假设我们有两个长度相等的数组

labels[] = ["label1", "label2", "label3", ...]
duration[] = [0.5, 1.2, 0.1, 0.1, 3.0, ...]
我在一个局域网里有一个主人和N个奴隶。假设阵列已复制到所有从属服务器。我现在想要的是,在所有这些机器上运行以下代码

for i in len(labels):
  print labels[i]
  sleep(duration[i])
我需要这段代码在客户机上同时启动

如何在所有客户端中同时触发“执行”事件?假设所有客户端都使用相同的NTP服务器进行同步,如果我要求它们在预定义的时间开始,那么准确度是否合理?
duration[]
数组的时间元素可以小到0.1秒,我希望有合理数量的同时性。

根据,“NTP通常可以在公共互联网上将时间维持在几十毫秒以内,在理想条件下,在局域网中可以达到超过一毫秒的精度。不对称路由和网络拥塞可能导致100毫秒或更大的错误。”

因此,使用公共NTP服务器在100ms内同步是可行的,并且可能是使其工作的最简单途径

由于您在局域网上,您可以让主机向下属发送网络消息,告知其当前时间,或者更简单地在局域网上运行您自己的NTP服务器并将群集指向它,从而获得更好的性能。

根据,“NTP通常可以在公共互联网上将时间保持在几十毫秒以内,并且在理想条件下,在局域网中可以实现优于一毫秒的精度。不对称路由和网络拥塞可能导致100毫秒或更大的错误。”

因此,使用公共NTP服务器在100ms内同步是可行的,并且可能是使其工作的最简单途径


由于您在局域网上,您可以通过让主机向下属发送网络消息,告知其当前时间,或者更简单地在局域网上运行您自己的NTP服务器并将群集指向它,从而获得更好的性能。

假设您在局域网上具有良好的性能特征,则NTP的交互式解决方案就是让主设备在收到消息后向从设备发送一条消息,以执行上述任务。如果传输和处理的延迟在预期的“合理同步”范围内,则应符合要求。假设您具有良好的性能,这可以合理预期为在LAN上,NTP的另一种解决方案是,主设备在收到消息后向从设备发送消息,以执行所述任务。如果传输和处理的延迟在预期的“合理同步”范围内,则应符合要求。这可以合理预期为简短回答-精确同时y-不可能。正如Russell所写,NTP仅在100ms内准确。在LAN上运行时,可以测量通信延迟,并且在发送任务时,可以在任务开始时添加一个超时。当您将其发送到
N
节点且平均延迟为
L
毫秒时,第一个节点将为N启动前需要等待
(N-1)*L
ms,第二个
(N-2)*L
ms…依此类推。最后一个将立即启动



为了了解同步时钟的问题有多复杂,你可以阅读谷歌的研究论文。他们使用原子钟和GPS时钟在一个数据中心内的纳秒内同步,在整个数据中心内的几毫秒内同步。

简短的回答——完全同时同步——是不可能的。正如拉塞尔所写,NTP只在一个时间内准确100毫秒。在局域网上运行时,您可以测量通信延迟,在发送任务时,您可以在任务开始时添加超时。当您将其发送到
N
节点时,平均延迟为
L
毫秒,第一个节点需要等待
(N-1)*L
毫秒才能开始,第二个
(N-2)*L
ms…等等。最后一个将立即启动



为了了解同步时钟的问题有多复杂,你可以阅读谷歌的研究论文。他们使用原子钟和GPS时钟在数据中心的纳秒内同步,在数据中心的几毫秒内同步。

正如其他人所写,使用互联网NTP服务器可能会造成太大的延迟

我看到两种选择:

  • 设置本地NTP服务器,并将其用作所有客户端的参考
  • 让你的客户端监听UDP数据包,并以广播/多播的方式发送这些数据包。然后它们应该或多或少同时启动

  • 正如其他人所写,使用Internet NTP服务器可能会导致太大的延迟

    我看到两种选择:

  • 设置本地NTP服务器,并将其用作所有客户端的参考
  • 让你的客户端监听UDP数据包,并以广播/多播的方式发送这些数据包。然后它们应该或多或少同时启动

  • 你需要多近的同步?0.1s?1s?10s?我希望它们同步到0.1s左右。正如我所说,每个标签至少会出现0.1s,因此如果你将每个标签视为屏幕上闪烁的颜色,我希望所有屏幕在相同的时间内闪烁相同的颜色。为了让人类观察者感知evENT作为同步的,它们可能需要以比的速度发生;您可能希望在至少15Hz内触发它们,并且在良好的照明条件下可能高达60Hz;间隔为0.067到0.017秒。仍然完全在NTP的能力范围内。您需要它们的同步程度如何?0.1s?1s?10s?我希望它们同步到大约t 0.1s。正如我所说,每个标签至少会出现0.1s,所以如果你