Python脚本作为后台进程的性能
我正在编写一个python脚本,作为应用程序和一些外部设备之间的“粘合剂”。脚本本身非常简单,有三个不同的过程:Python脚本作为后台进程的性能,python,performance,process,background,Python,Performance,Process,Background,我正在编写一个python脚本,作为应用程序和一些外部设备之间的“粘合剂”。脚本本身非常简单,有三个不同的过程: 请求数据(通过UDP从套接字连接) 接收响应(通过UDP从套接字连接) 处理响应并向第三方应用程序提供数据 然而,这将重复进行,并且对于几个(+/-200个不同的)设备。因此,一旦到达设备200,它将再次开始从设备001请求数据。这里我主要关心的是在执行脚本时不要让处理器陷入困境 更新: 我使用三个线程来完成上面的工作,每个进程一个线程。请求/响应是异步的,因为每个响应都包含处理它所
任何建议都将不胜感激。这是Python最好的异步框架,它允许您以最小的系统资源占用来执行这些任务,尤其是如果您希望“同时”处理多个设备,而不是仅在数百个设备之间进行循环,则更是如此(后者可能导致循环时间过长,特别是如果存在某个设备的回答非常延迟甚至偶尔无法回答一次并导致“超时”的风险;根据经验,我建议在任何给定时间至少有半打设备处于“可用”状态,以避免这种过度延迟风险).如果您对设备使用阻塞I/O,那么脚本在等待数据时不会占用任何处理器。您使用的处理器数量取决于您对数据进行的计算类型。Twisted看起来很有趣。我不太担心延迟回答问题,因为接收是由单独的线程完成的。I不过,我肯定会研究twisted。重点是,使用线程可能比异步I/O(由twisted等优秀的底层实现处理)消耗更多的系统资源。twisted(更一般地说,异步、事件驱动编程)确实需要一些时间来适应,但它在时间和精力的投资上提供了很高的回报!-)如果您使用
select
等待,那么就没有成本可言了……而这正是Twisted异步I/O在幕后所做的:select、poll、kqueue、MsgWaitForMultipleObjects、,或者,在您的特定系统上,反应堆模式的最佳实现是什么!-)