进程+线程+协程

进程+线程+协程

  • [1 进程](#1 进程)
    • [1.1 无进程](#1.1 无进程)
    • [1.2 多进程](#1.2 多进程)
    • [1.3 p1.join()](#1.3 p1.join())
    • [1.4 权重](#1.4 权重)
    • [1.5 全局变量list](#1.5 全局变量list)

1 进程

1.1 无进程

不使用进程,task_01和task_02先后执行

python 复制代码
import os
import time
from  multiprocessing import Process

def task_01():
    print("*"*8+' task_01 '+"*"*8)
    i = 0
    while True:
        time.sleep(0.5)
        print('task_01:  %d'%i)
        i += 1
        if i>10:
            break

def task_02():
    print("*"*8+' task_02 '+"*"*8)
    i = 0
    while True:
        time.sleep(1)
        print('task_02:  %d'%i)
        i += 10
        if i>30:
            break


if __name__ == '__main__':
    print("*"*8+' 主程序开始 '+"*"*8)
    task_01()
    task_02()
    print("#" * 8 + ' 主程序结束 ' + "#" * 8)
'''
## 运行结果
******** 主程序开始 ********
******** task_01 ********
task_01:  0
task_01:  1
task_01:  2
task_01:  3
task_01:  4
task_01:  5
task_01:  6
task_01:  7
task_01:  8
task_01:  9
task_01:  10
******** task_02 ********
task_02:  0
task_02:  10
task_02:  20
task_02:  30
######## 主程序结束 ########
Process finished with exit code 0
'''

1.2 多进程

父程序和子程序各自执行,互不干扰。由于只有一个核,task_01和task_02交替执行。

python 复制代码
import os
import time
from  multiprocessing import Process

def task_01():
    print("*"*8+' task_01 '+"*"*8)
    i = 0
    while True:
        time.sleep(0.5)
        print('task_01:  %d'%i)
        i += 1
        if i>10:
            break

def task_02():
    print("*"*8+' task_02 '+"*"*8)
    i = 0
    while True:
        time.sleep(1)
        print('task_02:  %d'%i)
        i += 10
        if i>100:
            break


if __name__ == '__main__':
    print("*"*8+' 主程序开始 '+"*"*8)
    p1 = Process(target = task_01,name="任务1")  # 子程序实例化
    p2 = Process(target = task_02,name="任务2")
    p1.start()   # 开启子程序
    p2.start()
    print("#" * 8 + ' 主程序结束 ' + "#" * 8)

## 运行结果
'''
******** 主程序开始 ********
######## 主程序结束 ########
******** task_01 ********
******** task_02 ********
task_01:  0
task_02:  0
task_01:  1
task_01:  2
task_02:  10
task_01:  3
task_01:  4
task_02:  20
task_01:  5
task_01:  6
task_02:  30
task_01:  7
task_01:  8
task_02:  40
task_01:  9
task_01:  10
task_02:  50
task_02:  60
task_02:  70
task_02:  80
task_02:  90
task_02:  100

Process finished with exit code 0
'''

1.3 p1.join()

p1.join() 表示主进程要等子进程执行完再执行p1.join()后面的代码

python 复制代码
# 
import os
import time
from  multiprocessing import Process

def task_01(name,s):
    print("*"*8+' task_01 '+"*"*8)
    i = 0
    while True:
        time.sleep(s)
        print(' %s:  task_01.id: %d, i:  %d'%(name,os.getpid(),i))
        i += 1
        if i>40:
            break

def task_02(name,s):
    print("*"*8+' task_02 '+"*"*8)
    j = 0
    while True:
        time.sleep(s)
        print(' %s:  task_02.id: %d, j:  %d'%(name,os.getpid(),j))
        j += 10
        if j>300:
            break


if __name__ == '__main__':
    print("*"*8+' 主程序开始 '+"*"*8)
    p1 = Process(target = task_01,name="任务1",args=("A",0.5))  #  给task_01传递参数
    p2 = Process(target = task_02,name="任务2",args=("B",1))
    count = 0
    p1.start()   # 开启子程序
    p2.start()
    print('p1.name: ',p1.name)
    print('p2.name: ',p2.name)


    ## 通过主程序控制子程序
    count = 0
    while True:
        time.sleep(0.3)
        count += 5
        print('count: ', count)
        if count== 50:
            p1.terminate()
            p2.terminate()
            break
    print("#" * 8 + ' 主程序结束 ' + "#" * 8)
'''
******** 主程序开始 ********
p1.name:  任务1
p2.name:  任务2
******** task_01 ********
******** task_02 ********
count:  5
count:  10
 A:  task_01.id: 3603, i:  0
count:  15
 A:  task_01.id: 3603, i:  1
 B:  task_02.id: 3604, j:  0
count:  20
count:  25
 A:  task_01.id: 3603, i:  2
count:  30
count:  35
 B:  task_02.id: 3604, j:  10
 A:  task_01.id: 3603, i:  3
count:  40
 A:  task_01.id: 3603, i:  4
count:  45
count:  50
######## 主程序结束 ########

Process finished with exit code 0
'''

1.4 权重

进程之间不共享权重

python 复制代码
import os
import time
from  multiprocessing import Process
N = 1
def task_01(name,s):
    print("*"*8+' task_01 '+"*"*8)
    global N
    while True:
        time.sleep(s)
        print(' %s:  task_01.id: %d, N:  %d'%(name,os.getpid(),N))
        N += 1
        if N>20:
            break

def task_02(name,s):
    print("*"*8+' task_02 '+"*"*8)
    global N
    while True:
        time.sleep(s)
        print(' %s:  task_02.id: %d, N:  %d'%(name,os.getpid(),N))
        N += 100
        if N>1000:
            break


if __name__ == '__main__':
    print("*"*8+' 主程序开始 '+"*"*8)
    p1 = Process(target = task_01,name="任务1",args=("A",0.5))  #  给task_01传递参数
    p2 = Process(target = task_02,name="任务2",args=("B",1))
    N = 100
    p1.start()   # 开启子程序
    p2.start()
    print('p1.name: ',p1.name)
    print('p2.name: ',p2.name)



    print("#" * 8 + ' 主程序结束 ' + "#" * 8)
'''    
******** 主程序开始 ********
p1.name:  任务1
p2.name:  任务2
######## 主程序结束 ########
******** task_02 ********
******** task_01 ********
 A:  task_01.id: 3710, N:  1
 B:  task_02.id: 3711, N:  1
 A:  task_01.id: 3710, N:  2
 A:  task_01.id: 3710, N:  3
 B:  task_02.id: 3711, N:  101
 A:  task_01.id: 3710, N:  4
 A:  task_01.id: 3710, N:  5
 B:  task_02.id: 3711, N:  201
 A:  task_01.id: 3710, N:  6
 A:  task_01.id: 3710, N:  7
 B:  task_02.id: 3711, N:  301
 A:  task_01.id: 3710, N:  8
 A:  task_01.id: 3710, N:  9
 B:  task_02.id: 3711, N:  401
 A:  task_01.id: 3710, N:  10
 A:  task_01.id: 3710, N:  11
 B:  task_02.id: 3711, N:  501
 A:  task_01.id: 3710, N:  12
 A:  task_01.id: 3710, N:  13
 B:  task_02.id: 3711, N:  601
 A:  task_01.id: 3710, N:  14
 A:  task_01.id: 3710, N:  15
 B:  task_02.id: 3711, N:  701
 A:  task_01.id: 3710, N:  16
 A:  task_01.id: 3710, N:  17
 B:  task_02.id: 3711, N:  801
 A:  task_01.id: 3710, N:  18
 A:  task_01.id: 3710, N:  19
 B:  task_02.id: 3711, N:  901
 A:  task_01.id: 3710, N:  20

Process finished with exit code 0
'''

1.5 全局变量list

进程之间不共享全局变量list

python 复制代码
# 
import os
import time
import random
from  multiprocessing import Process
N = []
def task_01(name,s):
    print("*"*8+' task_01 '+"*"*8)
    global N
    while True:
        time.sleep(s)
        print(' {}:  task_01.id: {}, N1:  {}'.format(name,os.getpid(),N))
        N.append(-round(random.random(),1))
        if len(N)>9:
            break

def task_02(name,s):
    print("*"*8+' task_02 '+"*"*8)
    global N
    while True:
        time.sleep(s)
        print(' {}:  task_02.id: {}, N2:  {}'.format(name,os.getpid(),N))
        N.append(round(random.random())*100)
        if len(N)>8:
            break


if __name__ == '__main__':
    print("*"*8+' 主程序开始 '+"*"*8)
    p1 = Process(target = task_01,name="任务1",args=("A",0.5))  #  给task_01传递参数
    p2 = Process(target = task_02,name="任务2",args=("B",1))
    N = 100
    p1.start()   # 开启子程序
    p2.start()
    print('p1.name: ',p1.name)
    print('p2.name: ',p2.name)



    print("#" * 8 + ' 主程序结束 ' + "#" * 8)
    time.sleep(10)
    print('NNNNNN: ', N)
'''
******** 主程序开始 ********
p1.name:  任务1
p2.name:  任务2
######## 主程序结束 ########
******** task_01 **************** task_02 ********

 A:  task_01.id: 3819, N1:  []
 B:  task_02.id: 3820, N2:  []
 A:  task_01.id: 3819, N1:  [-0.8]
 A:  task_01.id: 3819, N1:  [-0.8, -0.7]
 A:  task_01.id: 3819, N1:  [-0.8, -0.7, -0.8] 
 B:  task_02.id: 3820, N2:  [0]

 A:  task_01.id: 3819, N1:  [-0.8, -0.7, -0.8, -0.3]
 B:  task_02.id: 3820, N2:  [0, 0]
 A:  task_01.id: 3819, N1:  [-0.8, -0.7, -0.8, -0.3, -0.3]
 A:  task_01.id: 3819, N1:  [-0.8, -0.7, -0.8, -0.3, -0.3, -0.5]
 B:  task_02.id: 3820, N2:  [0, 0, 100]
 A:  task_01.id: 3819, N1:  [-0.8, -0.7, -0.8, -0.3, -0.3, -0.5, -0.3]
 A:  task_01.id: 3819, N1:  [-0.8, -0.7, -0.8, -0.3, -0.3, -0.5, -0.3, -0.9]
 B:  task_02.id: 3820, N2:  [0, 0, 100, 100]
 A:  task_01.id: 3819, N1:  [-0.8, -0.7, -0.8, -0.3, -0.3, -0.5, -0.3, -0.9, -0.2]
 B:  task_02.id: 3820, N2:  [0, 0, 100, 100, 100]
 B:  task_02.id: 3820, N2:  [0, 0, 100, 100, 100, 100]
 B:  task_02.id: 3820, N2:  [0, 0, 100, 100, 100, 100, 0]
 B:  task_02.id: 3820, N2:  [0, 0, 100, 100, 100, 100, 0, 0]
NNNNNN:  100

Process finished with exit code 0
'''
相关推荐
cnxy1883 小时前
围棋对弈Python程序开发完整指南:步骤1 - 棋盘基础框架搭建
开发语言·python
落叶,听雪3 小时前
河南建站系统哪个好
大数据·人工智能·python
极客小云4 小时前
【生物医学NLP信息抽取:药物识别、基因识别与化学物质实体识别教程与应用】
python·机器学习·nlp
南_山无梅落4 小时前
12.Python3函数基础:定义、调用与参数传递规则
python
laocooon5238578865 小时前
插入法排序 python
开发语言·python·算法
清水白石0087 小时前
《深入 Python 上下文管理器:contextlib.contextmanager 与类实现方式的底层差异全景解析》
开发语言·python
程序员佳佳7 小时前
GPT-4时代终结?GPT-5.2与Banana Pro实测数据公开,普通开发者如何接住这泼天富贵
开发语言·python·gpt·chatgpt·重构·api·midjourney
Blossom.1188 小时前
多模态大模型LoRA微调实战:从零构建企业级图文检索系统
人工智能·python·深度学习·学习·react.js·django·transformer
小钻风33668 小时前
软件测试: 从入门到实践 (接口测试)
软件测试·python
小鸡吃米…8 小时前
带Python的人工智能——计算机视觉
人工智能·python·计算机视觉