本质上我的代码中有 2 个“
while True:
”循环。两个循环都在最后。但是,当我运行代码时,只有第一个 while True:
循环运行,而第二个循环被忽略。
例如:
while True:
print "hi"
while True:
print "bye"
这里,它会不断地打印 hi,但根本不会打印 bye(实际代码中一个循环有一个
tracer.execute()
,另一个循环正在监听端口,它们都各自工作)。
有什么办法可以让两个循环同时独立工作吗?
您最初的惊讶与本质有关,即有限状态自动机的实际工作原理。
[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 +所有变量(阅读:产生它们需要大量时间和内存)并且没有相互协调)。
因此,决定哪种形式足以满足您的用例类型,并且更好地仔细检查新的阿姆达尔定律重新表述(对分布式或并行的成本的影响)