一、进程中的变量
1.进程之间不共享全局变量
(1)代码
import multiprocessing
import time
# 定义一个全局变量num_list,里面有一个元素100
num_list = [100]
# 写入数据
def write_data():
for i in range(5):
num_list.append(i)
time.sleep(0.1)
print("write_data:", num_list) # 读取写入数据后的num_list
# 读取数据
def read_data():
print("read_data:", num_list) # 读取全局变量num_list
if __name__ == '__main__':
# 创建写入数据的子进程
write_process = multiprocessing.Process(target=write_data)
# 创建读取数据的子进程
read_process = multiprocessing.Process(target=read_data)
# 开启写入子进程
write_process.start()
# 等待写入子进程执行完毕再继续
write_process.join()
# 开启读取数据子进程
read_process.start()
(2)结果(证明进程间的变量是不共享的)
注:创建子进程其实是对主进程进行拷贝,进程之间相互独立,访问的全局变量不是同一个,所以进程间不共享全局变量
2.主进程会等待所有的子进程执行完成程序再退出
(1)代码
import multiprocessing
import time
def work():
for i in range(10):
print("working...")
time.sleep(0.2)
if __name__ == '__main__':
# 创建子进程
work_process = multiprocessing.Process(target=work)
work_process.start()
# work_process.join() 加上join,会等待所有子进程运行结束,再继续往下执行等待一秒和打印语句
time.sleep(1)
print("主程序结束")
(2)结果
3.销毁子进程
(1)主进程退出前将所有子进程销毁
代码
import multiprocessing
import time
def work():
for i in range(10):
print("working...")
time.sleep(0.2)
if __name__ == '__main__':
work_process = multiprocessing.Process(target=work)
work_process.start()
time.sleep(1)
print("主进程执行完毕")
work_process.terminate()
结果
(2)设置守护进程,主进程退出后子进程直接销毁,不再执行进程中的代码
代码
import multiprocessing
import time
def work():
for i in range(10):
print("working...")
time.sleep(0.2)
if __name__ == '__main__':
work_process = multiprocessing.Process(target=work)
work_process.daemon = True
work_process.start()
time.sleep(1)
print("主进程执行完毕")
结果