Python中的分散式网络 - 如何?

时间:2011-05-01 03:23:53

标签: python networking

我想编写一个Python脚本,它将检查用户本地网络中是否有其他当前运行的脚本实例。

出于这个问题的目的,让我们说我正在编写一个仅通过命令行运行的应用程序,并且只在本地网络上“找到”应用程序的另一个实例时更新屏幕。以下示例输出:

$ python question.py
Thanks for running ThisApp!  You are 192.168.1.101.
  Found 192.168.1.102 running this application.
  Found 192.168.1.104 running this application.

有哪些图书馆/项目可以帮助实现这样的目标?

4 个答案:

答案 0 :(得分:8)

执行此操作的方法之一是所讨论的应用程序是广播UDP数据包,您的应用程序正在从不同节点接收该应用程序,然后显示它。 Twisted Networking Framework提供了完成这项工作的设施。文档也提供了一些简单的例子。

答案 1 :(得分:3)

好吧,你可以用套接字模块写一些东西。您必须有两个程序,用户本地计算机上的服务器,然后是与服务器连接的客户端程序。服务器还将使用select模块来侦听多个连接。然后,您将拥有一个客户端程序,该程序在运行时或在您需要时向服务器发送内容。然后,服务器可以打印出它正在维护的连接,包括IP地址等详细信息。

在这个链接中记录得非常好,比你需要的更多,但它会向你解释它对我的影响。 http://ilab.cs.byu.edu/python/

答案 2 :(得分:2)

您可以尝试广播UDP,我在这里找到了一些示例:http://vizible.wordpress.com/2009/01/31/python-broadcast-udp/

答案 3 :(得分:2)

  • 您可以拥有基于服务器的解决方案:客户端自行注册的中央服务器,以及查询正在注册的其他客户端。像Twisted这样的服务器框架可以在这里提供帮助。
  • 在点对点设置中,可以使用推送技术,例如UDP广播,其中每个客户端经常在网络上发出心跳包,供其他人接收。像socket这样的基本模块会有所帮助。
  • 或者,您可以采用 pull 方法,有趣的同伴需要积极发现其他人。这可能是最不直接的。首先,您需要扫描网络,即找出属于本地网络的IP并通过它们。然后,您需要依次联系每个IP。如果您的程序打开TCP端口,您可以尝试连接到此端口并找出您的程序正在运行。如果您希望程序完全不知道这些查询,则可能需要打开与远程IP的ssh连接并扫描程序的进程列表。所有这些可能涉及各种模块和库。您可能想要查看的是execnet