Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在继续循环的同时将值输出到另一个函数_Python_Loops - Fatal编程技术网

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

Python 在继续循环的同时将值输出到另一个函数,python,loops,Python,Loops,下午好。我目前有一个使用PythonV2.x的循环,它通过无线网卡不断检测信息。我希望实现的是,如果循环检测到一个已知的数据包(通过循环中的比较方程识别),那么已知数据包的值将被传递给另一个函数进行进一步处理(例如发送电子邮件给sysadmin)当创建电子邮件时,原始循环继续同时运行 这是否需要线程化,或者如果我正在使用循环,这是否会自动继续?我假设一旦一个已识别的值被传递给另一个函数,循环就会停止,但我不确定。(正如您可能期望的那样)这取决于您所说的同时。如果你有一个循环 while 1:

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

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

(正如您可能期望的那样)这取决于您所说的同时。如果你有一个循环

while 1:
    info = get_sensor_info()
    if is_important(info):
        email(info)
然后循环不会因为调用了另一个函数而停止!当然,
电子邮件作为循环的一部分,将按顺序执行

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

  • 获取传感器信息然后
  • 如果信息很重要,请发送电子邮件然后
  • 再次获取传感器信息然后
  • 如果信息很重要,请发送电子邮件然后
听起来这对你的目的应该是好的。另一方面,电子邮件可能需要一段时间,您不想在撰写/发送邮件时停止从传感器读取。然后,您需要启动一个单独的线程/进程来执行实际的发送。

(正如您所期望的那样)这取决于您所说的同步。如果你有一个循环

while 1:
    info = get_sensor_info()
    if is_important(info):
        email(info)
然后循环不会因为调用了另一个函数而停止!当然,
电子邮件作为循环的一部分,将按顺序执行

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

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

听起来这对你的目的应该是好的。另一方面,电子邮件可能需要一段时间,您不想在撰写/发送邮件时停止从传感器读取。然后,您需要启动一个单独的线程/进程来执行实际的发送。

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

for pkt in pkts:
    if pkt=="known packet":
        spawnNewThreadOrProcess(pkt)
        doOtherStuff()
如果不生成新线程或进程,则语句将按顺序执行,而不是同时执行


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

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

for pkt in pkts:
    if pkt=="known packet":
        spawnNewThreadOrProcess(pkt)
        doOtherStuff()
如果不生成新线程或进程,则语句将按顺序执行,而不是同时执行

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