4 回答
![?](http://img1.sycdn.imooc.com/545868c20001b8c402200220-100-100.jpg)
TA贡献1828条经验 获得超3个赞
从我们在评论中的讨论来看,我相信您想从基于循环外的独立计时器的循环中跳出。
此外,您不想确定循环内的中断/返回条件(在循环代码中的几个位置)并立即中断/返回,或者通过设置一个被检查为循环条件的标志。
用户当心:终止进程或线程需要仔细检查留下的任何残骸(打开的连接、占用的资源、阻塞/锁定等...)。在这种情况下,我不知道有什么,所以 - 至少对于初学者来说 - 应该这样做:
import multiprocessing as m
import time
def looper():
i = 0
while True:
print "a) i="+str(i)
time.sleep(4)
print "b) i="+str(i)
time.sleep(4)
i += 1
p = m.Process(target=looper)
p.daemon = True
print "starting"
p.start()
time.sleep(9)
p.terminate()
print "done"
输出:
starting
a) i=0
b) i=0
a) i=1
done
如果运行它,请注意需要 9 秒才能获得此输出。
除了计时器,您还可以使用不同的外部条件来终止。
请注意循环是如何在循环代码中(在步骤 a 和 b 之间)中断的,而不是在循环代码的末尾或开始处中断,通常情况下有 repeat 或 while 标志。此外,循环中没有中断条件,并且循环中没有信号或标志检查。我相信这就是你想要的。
多处理与线程不同,我建议您研究差异以确保这适合您的情况和整体应用程序。
![?](http://img1.sycdn.imooc.com/5458692c00014e9b02200220-100-100.jpg)
TA贡献1799条经验 获得超6个赞
如果您不想要太多代码,可以去掉while running
, 并使用while True
, 而不是if running == False: break
只使用break
。(抱歉,如果这没有帮助)
![?](http://img1.sycdn.imooc.com/5458478b0001f01502200220-100-100.jpg)
TA贡献1789条经验 获得超8个赞
我认为你无法绕过 a) 确定中断条件 b) 如果满足则中断
您的方法是通过设置标志然后在循环的 while(或重复)结束时检查标志来中断。
我没有看到在您提供的循环片段中设置了“运行”标志,因此很难为您的案例提供特定于代码的示例,但也许这样做:
您可以在不设置中断标志的情况下从循环中中断:如果满足条件,只需声明“中断”:
https://docs.python.org/2.0/ref/break.html
您还可以将循环放在一个函数中,并在检测到中断条件时尽早“返回”。这通过删除所有临时变量很好地清理了您的范围。
您可以将循环放在迭代器中并引发 StopIteration 异常以指示迭代结束
https://docs.python.org/3.9/library/exceptions.html
但在所有情况下,您都无法绕过检查每个重要位置的条件,然后执行中断或停止或返回。
有时可行的方法是,如果您的循环很长,您可以重构代码以减少执行检查的位置。
![?](http://img1.sycdn.imooc.com/545847d40001cbef02200220-100-100.jpg)
TA贡献1963条经验 获得超6个赞
也许你可以为此使用一个线程。启动一个线程来做循环事情,并在时间到时停止。参考这篇文章https://www.geeksforgeeks.org/python-different-ways-to-kill-a-thread/
添加回答
举报