在Python中独立运行多个while true循环

问题描述 投票:0回答:1

本质上我的代码中有 2 个“

while True:
”循环。两个循环都在最后。但是,当我运行代码时,只有第一个
while True:
循环运行,而第二个循环被忽略。

例如:

while True:
    print "hi"

while True:
    print "bye"

这里,它会不断地打印 hi,但根本不会打印 bye(实际代码中一个循环有一个

tracer.execute()
,另一个循环正在监听端口,它们都各自工作)。


有什么办法可以让两个循环同时独立工作吗?

python-2.7 while-loop
1个回答
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]
流,以便原则上避免同时访问任何 Python 对象发生冲突,如果您同意一次只执行一个指令流片段(并且循环执行 GIL 步进的实际顺序)。 ,你可以生活在一个安全、无碰撞的世界里。

Python 可能使用的另一个工具是

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

因此,决定哪种形式足以满足您的用例类型,并且更好地仔细检查新的阿姆达尔定律重新表述(对分布式或并行的成本的影响)

© www.soinside.com 2019 - 2024. All rights reserved.