进程+线程+协程

server/2024/12/23 6:11:59/

进程+线程+协程

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

1 进程

1.1 无进程

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

python">
import os
import time
from  multiprocessing import Processdef task_01():print("*"*8+' task_01 '+"*"*8)i = 0while True:time.sleep(0.5)print('task_01:  %d'%i)i += 1if i>10:breakdef task_02():print("*"*8+' task_02 '+"*"*8)i = 0while True:time.sleep(1)print('task_02:  %d'%i)i += 10if i>30:breakif __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 Processdef task_01():print("*"*8+' task_01 '+"*"*8)i = 0while True:time.sleep(0.5)print('task_01:  %d'%i)i += 1if i>10:breakdef task_02():print("*"*8+' task_02 '+"*"*8)i = 0while True:time.sleep(1)print('task_02:  %d'%i)i += 10if i>100:breakif __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:  100Process finished with exit code 0
'''

1.3 p1.join()

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

python"># 
import os
import time
from  multiprocessing import Processdef task_01(name,s):print("*"*8+' task_01 '+"*"*8)i = 0while True:time.sleep(s)print(' %s:  task_01.id: %d, i:  %d'%(name,os.getpid(),i))i += 1if i>40:breakdef task_02(name,s):print("*"*8+' task_02 '+"*"*8)j = 0while True:time.sleep(s)print(' %s:  task_02.id: %d, j:  %d'%(name,os.getpid(),j))j += 10if j>300:breakif __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 = 0p1.start()   # 开启子程序p2.start()print('p1.name: ',p1.name)print('p2.name: ',p2.name)## 通过主程序控制子程序count = 0while True:time.sleep(0.3)count += 5print('count: ', count)if count== 50:p1.terminate()p2.terminate()breakprint("#" * 8 + ' 主程序结束 ' + "#" * 8)
‘’‘
******** 主程序开始 ********
p1.name:  任务1
p2.name:  任务2
******** task_01 ********
******** task_02 ********
count:  5
count:  10A:  task_01.id: 3603, i:  0
count:  15A:  task_01.id: 3603, i:  1B:  task_02.id: 3604, j:  0
count:  20
count:  25A:  task_01.id: 3603, i:  2
count:  30
count:  35B:  task_02.id: 3604, j:  10A:  task_01.id: 3603, i:  3
count:  40A:  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 Nwhile True:time.sleep(s)print(' %s:  task_01.id: %d, N:  %d'%(name,os.getpid(),N))N += 1if N>20:breakdef task_02(name,s):print("*"*8+' task_02 '+"*"*8)global Nwhile True:time.sleep(s)print(' %s:  task_02.id: %d, N:  %d'%(name,os.getpid(),N))N += 100if N>1000:breakif __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 = 100p1.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:  1B:  task_02.id: 3711, N:  1A:  task_01.id: 3710, N:  2A:  task_01.id: 3710, N:  3B:  task_02.id: 3711, N:  101A:  task_01.id: 3710, N:  4A:  task_01.id: 3710, N:  5B:  task_02.id: 3711, N:  201A:  task_01.id: 3710, N:  6A:  task_01.id: 3710, N:  7B:  task_02.id: 3711, N:  301A:  task_01.id: 3710, N:  8A:  task_01.id: 3710, N:  9B:  task_02.id: 3711, N:  401A:  task_01.id: 3710, N:  10A:  task_01.id: 3710, N:  11B:  task_02.id: 3711, N:  501A:  task_01.id: 3710, N:  12A:  task_01.id: 3710, N:  13B:  task_02.id: 3711, N:  601A:  task_01.id: 3710, N:  14A:  task_01.id: 3710, N:  15B:  task_02.id: 3711, N:  701A:  task_01.id: 3710, N:  16A:  task_01.id: 3710, N:  17B:  task_02.id: 3711, N:  801A:  task_01.id: 3710, N:  18A:  task_01.id: 3710, N:  19B:  task_02.id: 3711, N:  901A:  task_01.id: 3710, N:  20Process 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 Nwhile True:time.sleep(s)print(' {}:  task_01.id: {}, N1:  {}'.format(name,os.getpid(),N))N.append(-round(random.random(),1))if len(N)>9:breakdef task_02(name,s):print("*"*8+' task_02 '+"*"*8)global Nwhile True:time.sleep(s)print(' {}:  task_02.id: {}, N2:  {}'.format(name,os.getpid(),N))N.append(round(random.random())*100)if len(N)>8:breakif __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 = 100p1.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:  100Process finished with exit code 0
‘’‘

http://www.ppmy.cn/server/114023.html

相关文章

Qt/C++编写的Onvif调试助手调试神器工具/支持云台控制/预置位设置等/有手机版本

一、功能特点 广播搜索设备,支持IPC和NVR,依次返回。可选择不同的网卡IP进行对应网段设备的搜索。依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。可对指定的Profile获取视频流Rtsp地址,比如主码流地址、子码流地址。可对每个设备设…

消息可靠投递

消息可靠投递 生产者消息投递到 Broker 时,万一网络断了,生产者以为自己投递成功了,消息队列以为没有生产者投递RabbitMQ 提供了两种方式控制可靠投递,confirm 确认模式,return 退回模式RabbitMQ 提供事务机制&#x…

如何在 PyTorch 中定义一个简单的卷积神经网络?

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 👍感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

以太网--TCP/IP协议(一)

概述 以太网是局域网的一种,其他的比如还有令牌环、FDDI。和局域网对应的就是广域网,如Internet,城域网等。 从网络层次看,局域网协议主要偏重于低层(业内一般把物理层、数据链路层归为低层)。以太网协议…

uniapp如何监听页面滚动?

在uni-app中,监听页面滚动主要通过在页面的.vue文件中的onPageScroll生命周期函数来实现。onPageScroll函数会在页面滚动时触发,你可以在这个函数中获取到当前页面的滚动位置等信息。 下面是一个简单的示例,展示了如何在uni-app中监听页面滚…

python(进阶2)实现自动化注册和登录

1. 分析需求 后端完成接口以后,工作中可能会涉及到自测通断,a接口和b接口之间可能有关联关系,例如:a接口注册,b接口登录,就需要a接口返回的参数传递到b接口 2. 环境准备 需要这些类包 import requests import rand…

socket 断线重连和心跳机制如何实现?

一、socket 概念 1.套接字(socket)是网络通信的基石,是支持 TCP/IP 协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的 IP 地址…

WordPress安装指南:主题、插件和最佳实践

WordPress是世界上最流行的内容管理系统(CMS),因其易用性和灵活性而备受欢迎。本文将指导您完成WordPress的安装过程,介绍一些常用的主题和插件,并分享一些重要的注意事项。 1. WordPress安装 步骤1:准备…