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

2024-06-10 05:33:56 发布

您现在位置:Python中文网/ 问答频道 /正文

下午好。我目前有一个使用pythonv2.x的循环,它不断地通过无线网卡检测信息。我希望实现的是,如果循环检测到一个已知的包(通过循环中的比较方程识别),已知数据包的值将被传递给另一个函数进行进一步处理(例如,发送给sysadmin的电子邮件),同时在创建电子邮件时原始循环继续同时运行。你知道吗

这需要线程化吗?或者如果我使用循环,这会自动继续吗?我假设一旦一个确定的值被传递给另一个函数,循环就会停止,但我不确定。你知道吗


Tags: 函数信息电子邮件数据包线程网卡无线发送给
2条回答

(如你所料)这取决于你所说的同时是什么意思。如果你有一个循环

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

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

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

  • 获取传感器信息。然后
  • 如果信息很重要,请发电子邮件。然后
  • 再次获取传感器信息。然后
  • 如果信息很重要,请发电子邮件。然后
  • 。。。你知道吗

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

当然,您需要多线程或多处理。你知道吗

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

如果不生成新线程或进程,则语句将按顺序执行,而不是同时执行。你知道吗

我想补充一点,如果您将已知的数据包传递给一个函数,该函数在其下面生成一个新的线程进程,那么显然您不需要担心它。但关键是循环将按顺序执行语句,除非生成新的执行线程或进程。你知道吗

相关问题 更多 >