2009-08-30 24 views
0

我正在编写python脚本以充当应用程序和某些外部设备之间的“粘合剂”。脚本本身是相当简单和具有三个不同的进程:作为后台进程的Python脚本性能

  1. 请求数据(从套接字连接,经由UDP)
  2. 接收响应(从插座连接,经由UDP)
  3. 过程响应和使数据可用于第三方应用

但是,这将重复完成,并且对于几个(+/- 200个不同的)设备。所以一旦它到达了设备#200,它就会开始再次请求来自设备#001的数据。我在这里主要关心的不是在执行脚本时让处理器停滞不前。

更新: 我正在使用三个线程来完成上述过程中的每个线程。请求/响应是异步的,因为每个响应都包含我需要处理的所有内容(包括发件人详细信息)。

有什么办法可以让脚本在后台运行,并尽可能少使用系统资源?这将在Windows 2003机器上运行。

任何意见,将不胜感激。

回答

4

TwistedTwisted - Python的最佳异步框架 - 允许您以最少的系统资源占用来执行这些任务,特别是如果您想要“一次”处理多个设备而不是专门处理这些任务(后者可能会导致循环时间过长,特别是如果某些设备有可能延迟回答甚至不能及时回答并导致“超时”的风险;作为经验法则我建议在任何给定的时间至少有半打设备“在场”以避免这种过度延迟风险)。

+0

扭曲看起来很有趣。我不太担心延迟回答问题,因为接收是由一个单独的线程完成的。我一定会考虑扭曲。 – mozami 2009-08-30 01:23:26

+0

需要指出的是,使用线程可能比异步I/O(由诸如Twisted的优秀底层实现处理)更耗费系统资源。扭曲的(更一般的,异步的,事件驱动的编程)确实需要一些习惯,但它在投入时间和精力方面带来高回报! - ) – 2009-08-30 01:55:50

5

如果您正在对设备使用阻塞I/O,那么脚本在等待数据时不会消耗任何处理器。您使用多少处理器取决于您对数据进行的处理类型。

+2

如果您使用'select'等待,那么不需要花费说到。 – 2009-08-30 01:32:48

+0

......这就是Twisted的异步I/O在下面做的事情:select,poll,kqueue,MsgWaitForMultipleObjects,或者任何在你的特定系统上反应器模式的最佳实现! - ) – 2009-08-30 01:57:24

相关问题