标签:lan str 其他 入队 pre 知识 通信 输出 进程与线程
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
接收完毕...
① 各个进程间全局变量的值是 不共享 的
② 各个进程间可以通过 Queue 创建的队列来传递变量,列表,字符串值(包括全局变量的值)
③ 每个进程任务里的参数,除了 全局变量(函数局部变量),其余的参数都需要通过外部实参,传入到内部实参。
③ 进程与线程之间的关系与区别:
标签:lan str 其他 入队 pre 知识 通信 输出 进程与线程
原文地址:https://www.cnblogs.com/fry-hell/p/12818477.html