首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多处理不工作与cmd2模块,导入问题?

多处理不工作与cmd2模块,导入问题?
EN

Stack Overflow用户
提问于 2015-04-28 20:21:05
回答 1查看 231关注 0票数 0

从这个问题Multiprocessing code works upon import, breaks upon being called扩展了解决方案,我在我的项目中注入了一些多处理代码,它很快就坏了。

我想是进口问题。我有两个模块。test.py看起来像:

代码语言:javascript
复制
print 'omnia praeclara'
import multi4
if __name__ == "__main__":
    multi4.init_manager()
print 'rara sunt'   

multi4.py看起来像:

代码语言:javascript
复制
import multiprocessing as mp
def add():
    print 2+2
def init_manager():
    proc = mp.Process(target=add)
    proc.start()
    proc.join()

现在,这段代码很好用。当从命令行(Windows)运行时,它会产生以下结果:

代码语言:javascript
复制
omnia praeclara
omnia praeclara
rara sunt
4
rara sunt

这是意料之中的(在上面的链接中解释了双重打印)。

但是-当我把test.py做成这样的时候:

代码语言:javascript
复制
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()

我得到了

代码语言:javascript
复制
omnia praeclara
omnia praeclara
rara sunt
by that remembered or with that forgot.
+++

这是cmd2模块的命令提示符。调用add的进程不会产生任何结果。现在挂起来了。如果我在提示符中键入exit,就会得到:

代码语言:javascript
复制
+++ exit
4
rara sunt

by that remembered or with that forgot.
+++

这样,多处理代码就完成了,但是现在我回到了我的cmd2提示符中!只有当我再次退出时,我才真正退出。

很明显,每样东西都是两次进口。这是在上面的链接中引用的,但是有什么方法可以避免这种情况吗?更重要的是,当我在cmd2**?**中做事情时,如何让我的进程在后台工作

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-28 21:26:45

这与导致双重打印的问题相同--在test.py中没有受到if __name__ == "__main__":保护保护的任何内容都将在父进程和子进程中执行。您需要将对Prompt().cmdloop()的调用转移到警卫之下,以防止在子节点中执行该调用:

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29929165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档