欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

10 ,子进程顺序,主进程让位全部子进程,多进程无法操作同一个变量

程序员文章站 2024-01-25 20:06:34
...

1 ,控制子进程顺序 :

  1. 目的 : 10 个进程分先后
  2. 思路 : 每次开子进程,都让主进程停住
  3. 精华代码 :
p.join()
  1. 完整代码 : 无序 ( 正常现象 )
# 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
  1. 完整代码 : 有序 ( 人工干涩 )
# 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 ,让位子进程 :

  1. 目的 : 先让小姐姐们报名,我们再挑选女朋友
  2. 技术 : 让主进程等待子进程全部结束,再执行
  3. 精华代码 :
[p.join() for p in lst]
  1. 完整代码 :
# 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 ,多进程无法共享内存 : 可读,不可写

  1. 多个线程之间 : 可以获取数据,不可以修改数据
  2. 理论 : 每个进程有自己的独立内存空间
  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
1

4 ,多线程无法修改数据 : 类数据的也无法修改

  1. 代码 :
# 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 ,疑问 : 数据修改到哪里去了 ?

在各自线程的局部内存中