从这个问题Multiprocessing code works upon import, breaks upon being called扩展解决方案,我在我的项目中注入了一些多处理代码,但很快就崩溃了。在
我认为有进口问题。我有两个模块。test.py
看起来像:
print 'omnia praeclara'
import multi4
if __name__ == "__main__":
multi4.init_manager()
print 'rara sunt'
并且multi4.py
看起来像:
现在,这个代码可以正常工作。从命令行(Windows)运行时,它将生成以下内容:
omnia praeclara
omnia praeclara
rara sunt
4
rara sunt
这是意料之中的(双重打印在上面的链接中解释)。在
然而,当我把test.py
变成这样时:
print 'omnia praeclara'
import multi4
if __name__ == "__main__":
multi4.init_manager()
print 'rara sunt'
import cmd2
class Prompt(cmd2.Cmd):
def default(self, line):
return cmd2.Cmd.default(self, line)
prompt = '\n+++ '
intro = '\n by that remembered or with that forgot.'
def do_exit(self, line):
return True
Prompt().cmdloop()
我明白了
omnia praeclara
omnia praeclara
rara sunt
by that remembered or with that forgot.
+++
{cd4>是这个模块的提示符。调用add
的进程不生成任何内容。现在挂了。如果我在提示符中输入exit
,我会得到:
+++ exit
4
rara sunt
by that remembered or with that forgot.
+++
多处理代码结束了,但现在我回到了我的cmd2提示符中!只有当我再次退出时,我才真正退出。在
显然,所有东西都被进口了两次。在上面的链接中提到了这一点,但是有什么方法可以避免这种情况吗?更重要的是,当我在cmd2
中工作时,如何让我的流程在后台工作?
这是导致双重打印的同一个问题,
test.py
中未受if __name__ == "__main__":
保护的任何内容都将在父进程和子进程中执行。您需要将调用移动到保护下的Prompt().cmdloop()
,以防止在子级中执行它:相关问题 更多 >
编程相关推荐