10 ,子进程顺序,主进程让位全部子进程,多进程无法操作同一个变量
程序员文章站
2024-01-25 20:06:34
...
1 ,控制子进程顺序 :
- 目的 : 10 个进程分先后
- 思路 : 每次开子进程,都让主进程停住
- 精华代码 :
p.join()
- 完整代码 : 无序 ( 正常现象 )
# Author:SFL
from multiprocessing import Process
from multiprocessing import process
import time
import os
def aa(s):
print(s)
if __name__ == '__main__':
for i in range(10):
p = Process(target=aa,args=(i,))
p.start()
结果 :
0
1
4
2
3
6
7
5
9
8
- 完整代码 : 有序 ( 人工干涩 )
# Author:SFL
from multiprocessing import Process
from multiprocessing import process
import time
import os
def aa(s):
print(s)
if __name__ == '__main__':
for i in range(10):
p = Process(target=aa,args=(i,))
p.start()
p.join()
结果 :
0
1
2
3
4
5
6
7
8
9
2 ,让位子进程 :
- 目的 : 先让小姐姐们报名,我们再挑选女朋友
- 技术 : 让主进程等待子进程全部结束,再执行
- 精华代码 :
[p.join() for p in lst]
- 完整代码 :
# Author:SFL
from multiprocessing import Process
import random
def func(i):
print("我是 %s 的"%(i))
if __name__ == '__main__':
lst = []
content = ["山东","河南","河北","湖南","湖北"]
for i in content:
p = Process(target=func,args=(i,))
p.start()
lst.append(p)
[p.join() for p in lst]
print()
print("我选 %s 的"%(random.choice(content)))
3 ,多进程无法共享内存 : 可读,不可写
- 多个线程之间 : 可以获取数据,不可以修改数据
- 理论 : 每个进程有自己的独立内存空间
- 代码 :
# Author:SFL
from multiprocessing import Process
import random
class A :
def __init__(self,data:int):
self.data = data
def setA(a:A,i:int):
a.data=i
def getA(a:A):
print(a.data)
if __name__ == '__main__':
a = A(1)
p1 = Process(target=setA,args=(a,2))
p2 = Process(target=setA,args=(a,3))
p1.start()
p2.start()
print(a.data)
p3 = Process(target=getA,args=(a,))
p4 = Process(target=getA,args=(a,))
p3.start()
p4.start()
- 结果 : 可以读,不可以写
1
1
1
4 ,多线程无法修改数据 : 类数据的也无法修改
- 代码 :
# Author:SFL
from multiprocessing import Process
import random
class A :
count = 1
def __init__(self,data:int):
self.data = data
def setA(a:A,i:int):
a.count = i
def getA(a:A):
print(a.count)
if __name__ == '__main__':
a = A(0)
a.count = 5
p1 = Process(target=setA,args=(a,3))
p2 = Process(target=setA,args=(a,4))
p1.start()
p2.start()
print(a.count)
5 ,疑问 : 数据修改到哪里去了 ?
在各自线程的局部内存中
上一篇: vue封装echarts组件