Python多处理使用错误的函数创建子进程
我正在尝试编写代码,使用另一个模块(demo_2.py)创建子进程,Python多处理使用错误的函数创建子进程,python,python-2.7,multiprocessing,Python,Python 2.7,Multiprocessing,我正在尝试编写代码,使用另一个模块(demo_2.py)创建子进程, 如果我在子进程上得到想要的值,就退出程序 但结果是这样的 demo_1似乎有两个子进程,分别运行demo_1和加载demo_2。 我想让子进程只运行demo_2 我错过了什么 演示1.py #!/usr/bin/env python # -*- coding: utf-8 -*- from multiprocessing import Process,Queue import sys import demo_2 as A
如果我在子进程上得到想要的值,就退出程序 但结果是这样的 demo_1似乎有两个子进程,分别运行demo_1和加载demo_2。
我想让子进程只运行demo_2 我错过了什么 演示1.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from multiprocessing import Process,Queue
import sys
import demo_2 as A
def multi_process():
print ("Function multi_process called!")
process_status_A = Queue()
process_status_B = Queue()
A_Process = Process(target = A.process_A, args = (process_status_A,))
B_Process = Process(target = A.process_A, args = (process_status_B,))
A_Process.start()
B_Process.start()
while True:
process_status_output_A = process_status_A.get()
process_status_output_B = process_status_B.get()
if process_status_output_A == 'exit' and process_status_output_B == 'exit':
print ("Success!")
break
process_status_A.close()
process_status_B.close()
A_Process.join()
B_Process.join()
sys.exit()
print ("demo_1 started")
if __name__ == "__main__":
multi_process()
演示2.py
class process_A(object):
def __init__(self, process_status):
print ("demo_2 called!")
process_status.put('exit')
def call_exit(self):
pass
应该是
if process_status_A_output == 'exit' and process_status_B_output == 'exit':
结论:变量的命名很重要。 避免使用几乎相同的长变量名(例如
过程状态\u A
和过程状态\u A\u输出
)。
首先放置变量名的区别部分有助于澄清变量的含义
所以不是
process_status_A_output
process_status_B_output
也许用
output_A
output_B
因为Windows缺少
os.fork
,
在Windows上,每次生成新的子进程时,都会启动一个新的Python解释器,并导入调用模块。
因此,您不希望在生成的子流程中运行的代码必须是(请特别参阅标题为“安全导入主模块”的部分):
因此使用
if __name__ == "__main__":
print ("demo_1 started")
multi_process()
为避免打印额外的“演示1已启动”
消息
应该是
if process_status_A_output == 'exit' and process_status_B_output == 'exit':
结论:变量的命名很重要。 避免使用几乎相同的长变量名(例如
过程状态\u A
和过程状态\u A\u输出
)。
首先放置变量名的区别部分有助于澄清变量的含义
所以不是
process_status_A_output
process_status_B_output
也许用
output_A
output_B
因为Windows缺少
os.fork
,
在Windows上,每次生成新的子进程时,都会启动一个新的Python解释器,并导入调用模块。
因此,您不希望在生成的子流程中运行的代码必须是(请特别参阅标题为“安全导入主模块”的部分):
因此使用
if __name__ == "__main__":
print ("demo_1 started")
multi_process()
为了避免打印额外的
“demo_1 started”
消息。这就解释了为什么我的代码永远不会结束,并且只在Linux上按我想要的方式运行。(未在macOS上测试)谢谢!这就解释了为什么我的代码永远不会结束,并且只在Linux上按我所希望的那样运行。(没有在macOS上测试)谢谢!