多处理无法与cmd2模块一起工作,导入问题?

2024-10-03 02:37:53 发布

您现在位置:Python中文网/ 问答频道 /正文

从这个问题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看起来像:

^{pr2}$

现在,这个代码可以正常工作。从命令行(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中工作时,如何让我的流程在后台工作?


Tags: 代码pyimportselfbythatlineprint
1条回答
网友
1楼 · 发布于 2024-10-03 02:37:53

这是导致双重打印的同一个问题,test.py中未受if __name__ == "__main__":保护的任何内容都将在父进程和子进程中执行。您需要将调用移动到保护下的Prompt().cmdloop(),以防止在子级中执行它:

print 'omnia praeclara'
import multi4

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

if __name__ == "__main__":
    multi4.init_manager()
    Prompt().cmdloop()

相关问题 更多 >