1、问题
from multiprocessing import *
import time
def fun1():
print("播放音乐")
time.sleep(5)
print("播放下一首")
def fun2():
print("游戏开始")
time.sleep(2)
print("游戏结束")
print("主进程开始执行:")
p1 = Process(target=fun1)
p2 = Process(target=fun2)
p1.start()
p2.start()
p1.join()
p2.join()
print("主进程执行中途")
上述代码,可能出现的问题如下:
1.1 问题1
RuntimeError:
This probably means that you are not using fork to start your
child processes and you have forgotten to use the proper idiom
in the main module:
大概意思是: 这可能是因为没有使用fork去启动你的子进程,忽略在主模块使用合适的语法
造成危害: windows系统上,创建子进程并启动,会导入启动它的文件,会重复执行主进程中的语句并不停地创建子进程,最后报错
解决方案: windows系统使用Process创建子进程使用if保护起来,有了这个判断,就不会重复递归创建进程,(Linux系统上没有此问题)代码如下:
print("主进程开始执行:")
if __name__ == '__main__':
p1 = Process(target=fun1)
p2 = Process(target=fun2)
p1.start()
p2.start()
p1.join()
p2.join()
print("主进程执行中途")
执行结果:
有执行结果分析:windows上使用Process创建子进程,每启动一次,主进程中所有的语句都会重复执行。
求解答
windows系统上如何避免主进程代码重复执行的问题?例如下列代码,在windows上执行,如何避免enter_room(sock)重复执行
def main():
"""
客户端启动函数
:return:
"""
sock = socket(AF_INET, SOCK_DGRAM)
# 进入聊天室
enter_room(sock)
# 开始聊天
p1 = Process(target=recv_msg, args=(sock,))
p1.start()
# 接收消息
send_msg(sock)
p1.join()
# 发送消息