基本上我的代码中有2个“while True:
”循环。两个循环都在最后。但是,当我运行代码时,只会运行第一个while True:
循环,而忽略第二个循环。
例如:
while True:
print "hi"
while True:
print "bye"
在这里,它将连续打印hi,但根本不打印再见(实际代码有一个循环tracer.execute()
,另一个是监听端口,它们都是自己工作的)。
有没有办法让两个循环同时独立工作?
答案 0 :(得分: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]
可能引入的每个案例的一种非常便宜的避免形式的故意实现)将最终交错每个(现在){{3} } -streams,以便主要避免同时碰撞任何Python对象。如果你对这个execute-just-one-instruction-stream-fragment-at-time很好(并且循环它们的实际GIL步骤执行的顺序,你可以生活在一个安全无碰撞的世界。
Python可能使用的另一个工具是 joblib.Parallel()( joblib.delayed() )
,你需要掌握更多的东西才能制作这些(现在是一组完全生成的子进程,每个(是) ,每个)拥有python-state +所有变量的完整副本(读取:生成&#39; em所需的大量时间和内存),并且没有相互协调。
因此,确定哪种形式足以满足您的用例类型,[CONCURRENT]