從這個問題擴展解決方案Multiprocessing code works upon import, breaks upon being called,我已經注入了一些多處理代碼到我的項目,它已經及時打破。多處理無法使用cmd2模塊,導入問題?
我認爲有進口問題。我有兩個模塊。 test.py
樣子:
print 'omnia praeclara'
import multi4
if __name__ == "__main__":
multi4.init_manager()
print 'rara sunt'
和multi4.py
樣子:
import multiprocessing as mp
def add():
print 2+2
def init_manager():
proc = mp.Process(target=add)
proc.start()
proc.join()
現在,這個代碼工作正常。
omnia praeclara
omnia praeclara
rara sunt
4
rara sunt
哪個是可以預料的(重複印刷在鏈接如上所述):命令行(Windows)中運行時它產生如下。
無論其---當我提出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.
+++
這是cmd2
模塊的命令提示符。調用add
的過程不會產生任何內容。它現在掛了。如果鍵入exit
到提示我得到:
+++ exit
4
rara sunt
by that remembered or with that forgot.
+++
所以多代碼完成,但現在我回我CMD2提示!只有當我再次退出時,我才真正退出。
顯然,一切都被導入兩次。這是在上面的鏈接引用,但有什麼辦法可以避免這種情況?更重要的是,當我在cmd2
中執行某些操作時,如何讓我的進程在後臺運行?
這與以前的問題相同;你需要保護test.py的入口點。移動執行'Prompt()。cmdloop()'在'if__name__ =='__main__「:'guard下面的代碼,這樣它就不會在子節點和父節點中執行。 – dano
你是一個多處理的神。 – Wapiti
我的代碼和問題比我發佈的更復雜,但你只是解決了整個問題。作爲回答發佈,並且此多處理n00b將接受。我沒有意識到保護進入的重要性。謝謝。 – Wapiti