import multiprocessing as mul_p import time egg1 = 1 def write(egg2, q): global egg1 print("write全局变量彩蛋[%s]..." % egg1) print("write彩蛋[%s]..." % egg2) egg1 -= 1 print("write全局变量彩蛋[%s]...原来的彩蛋[1]" % egg1) # 将修改后的彩蛋1的值放入队列中去 q.put(egg1) def read(egg2, q): global egg1 print("read全局变量彩蛋[%s]..." % egg1) print("read彩蛋[%s]..." % egg2) while True: # 从队列中取出 p1 子进程中的 全局变量彩蛋1 的值 egg1 = q.get() print("read接收到的write中的全局变量彩蛋[1]的值:%d" % egg1) if q.empty(): print("接收完毕...") break def main(): # 假设连个进程都须要打印下面这个彩蛋2 egg2 = 2 # ① 建立一个队列,能够不填,队列就能够很大,但有个极限,咱们不去考虑它 # 若是填了数字为 x ,则这个队列能够存储 x 个数据 q = mul_p.Queue() # ② 建立两个进程对象 p1 = mul_p.Process(target=write, args=(egg2, q,)) p2 = mul_p.Process(target=read, args=(egg2, q,)) # ③ 让两个子进程开始工做 p1.start() # 先让主进程 休息1s 让 p1 子进程先执行完,否则两个子进程 争着执行 打印输出会乱套 time.sleep(1) p2.start() if __name__ == "__main__": main()
write全局变量彩蛋[1]... write彩蛋[2]... write全局变量彩蛋[0]...原来的彩蛋[1] read全局变量彩蛋[1]... read彩蛋[2]... read接收到的write中的全局变量彩蛋[1]的值:0 接收完毕...
① 各个进程间全局变量的值是 不共享 的python
② 各个进程间能够经过 Queue 建立的队列来传递变量,列表,字符串值(包括全局变量的值)函数
③ 每一个进程任务里的参数,除了 全局变量(函数局部变量),其他的参数都须要经过外部实参,传入到内部形参。线程
③ 进程与线程之间的关系与区别:code