【问题标题】:Running multiple while true loops independently in python在python中独立运行多个while true循环
【发布时间】:2020-06-07 05:47:15
【问题描述】:

基本上我的代码中有 2 个“while True:”循环。两个循环都在最后。然而,当我运行代码时,只有第一个 while True: 循环运行,第二个被忽略。

例如:

while True:
    print "hi"

while True:
    print "bye"

在这里,它会不断地打印 hi,但根本不会打印 bye(实际代码有一个 tracer.execute() 用于一个循环,另一个正在侦听一个端口,它们都各自工作)。


有没有办法让两个循环同时独立工作?

【问题讨论】:

  • 你希望你的输出是什么?请发布您的预期输出示例
  • 另外,它只打印hi,因为它处于无限循环中 - while True。只要条件是True,它就会运行
  • 啊,我明白了。好的,所以在您发表评论后,我尝试了修复,它对此有效,但不适用于我的实际代码 - 所以我要发布一个带有实际代码的新问题(以及上面 yklsga 所说的预期输出) - 但谢谢你们俩都有帮助:)
  • 两个 cmets 上只有我一个人。另外,很高兴我能帮上忙。 yw @doodspav

标签: python-2.7 while-loop


【解决方案1】:

是的。
一种让两个循环同时独立工作的方法:

您最初的惊讶与自然有关,即有限状态自动机的实际工作方式。

[0]: any-processing-will-always-<START>-here
[1]: Read a next instruction
[2]: Execute the instruction
[3]: GO TO [1]

抽象指令流以纯粹的[SERIAL] 方式一个接一个地执行。自从图灵大叔之后,CPU里就没有别的办法了。

您希望同时独立运行更多指令流的愿望称为 [CONCURRENT] 进程调度。


您有多种工具可以实现所需的作案手法:

了解一种较弱的形式,仅使用 基于线程的并发(由于特定于 Python 的 GIL 锁定,它在物理硬件上作为[CONCURRENT]-处理执行,但是 GIL 交错(它被有意地实现为每种情况下的一种非常便宜的避免冲突形式,这 [CONCURRENCY] 可能会引入)最终将交错每个(现在)[CONCURRENT]-streams,因此原则上避免同时访问任何 Python 对象的冲突。如果你对这个 execute-just-one-instruction-stream-fragment-at-a-time 没问题(并循环他们的 GIL 分步执行的实际顺序),您可以生活在一个安全无碰撞的世界中。

Python 可能使用的另一个工具是 joblib.Parallel()( joblib.delayed() ),您必须掌握更多的东西来制作这些(现在是一组完全衍生的子进程,每个(是的,每个) 拥有 python-state + 所有变量的完整副本(阅读:产生它们需要大量时间和内存)并且没有相互协调)。

因此,请确定哪种形式适合您的用例,然后better check the new Amdahl's Law re-formulation carefully ( implications on costs of going distributed or parallel )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    相关资源
    最近更新 更多