进程+线程+协程

进程+线程+协程

  • [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
'''
相关推荐
Book_熬夜!4 分钟前
Python基础(六)——PyEcharts数据可视化初级版
开发语言·python·信息可视化·echarts·数据可视化
我的运维人生14 分钟前
利用Python与Ansible实现高效网络配置管理
网络·python·ansible·运维开发·技术共享
毕设木哥21 分钟前
计算机专业毕业设计推荐-基于python的汽车汽修保养服务平台
大数据·python·计算机·django·汽车·毕业设计·课程设计
m0_638971342 小时前
ARM概念
python
夜幕龙2 小时前
robomimic基础教程(三)——自带算法
人工智能·python·算法·机器人
千天夜3 小时前
python本地进程通讯----共享内存变量
python
DengHua22033 小时前
python定时发送邮件的功能如何实现自动化?
python·api接口·邮件营销·邮件群发·邮件接口·触发式邮件·验证码邮件
Teleger3 小时前
使用python来保存键盘输入情况,可保存到sqlite3数据库
python·conda
NEFU AB-IN3 小时前
3291. 形成目标字符串需要的最少字符串数 I
python
cd_farsight3 小时前
JAVA与Python谁更适合后端?
java·开发语言·python