在继续循环的同时将值输出到另一个函数

时间:2012-02-28 15:32:31

标签: python loops

G'afternoon。我目前使用Python v2.x进行循环,通过无线网卡持续检测信息。我想要实现的是,如果循环例如检测到已知数据包(通过循环内的比较方程确定),则已知数据包的值将被传递给另一个函数以进行进一步处理(例如,发送到sysadmin的电子邮件)在创建电子邮件的同时,原始循环继续同时运行。

这需要线程还是我正在使用循环,这会自动继续吗?我假设一旦识别出的值传递给另一个函数,循环就会停止,但我不确定。

2 个答案:

答案 0 :(得分:1)

当然,您需要多线程或多处理。

for pkt in pkts:
    if pkt=="known packet":
        spawnNewThreadOrProcess(pkt)
        doOtherStuff()

如果你没有产生新的线程或进程,那么语句将按顺序执行,而不是同时执行。

我想补充一点,如果你将已知的数据包交给一个函数,无论如何都会产生一个新的线程进程,那么显然你不需要担心它。但重点是循环将按顺序执行语句,除非生成新的执行线程或进程。

答案 1 :(得分:0)

(正如您所料),这取决于同时的含义。如果你有一个循环

while 1:
    info = get_sensor_info()
    if is_important(info):
        email(info)

然后循环不会因为你调用另一个函数而停止!当然,作为循环一部分的email将按顺序执行。

也就是说,事件的顺序如下:

  • 获取传感器信息。 ,然后
  • 如果信息很重要,请通过电子邮件发送。 ,然后
  • 再次获取传感器信息。 ,然后
  • 如果信息很重要,请通过电子邮件发送。 ,然后
  • ...

听起来这对你的目的应该没问题。另一方面,也许电子邮件需要一段时间,并且您不希望在传感器被编写/发送时停止读取。然后你需要启动一个单独的线程/进程来进行实际的发送。