Python基础-进程中的变量

一、进程中的变量

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("主进程执行完毕")

结果

猜你喜欢

转载自blog.csdn.net/qq_39620483/article/details/87687610