多任务解析

什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务。 现在,多核CPU已经非常普及了,但是,即使过去的单核CPU,也可以执行 多任务。由于CPU执行代码都是顺序执行的,那么,单核CPU是怎么执行多 任务的呢?

其实就是操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务 2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。 表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太 快了,我们感觉就像所有任务都在同时执行一样。

真正的并行执行多任务只能在多核CPU上实现,但是,由于任务数量远远多 于CPU的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核 心上执行。

多任务表现形式

window下打开任务管理器可以很清晰看到多个进程在同时执行任务,qq、微信等都是已进程的形式寄存在window下。大多我们在写一些控制台程序真正执行的时候都是以进程调度。

在linux下以fork的形式创建进程,简单写个实例:

多次fork创建,进程数会已指数倍增长。

`

import os

import time

num = 0

# 主进程创建了一个子进程

ret = os.fork()

if ret == 0:

num+=1

print('ret = 0,num=%d',num)

else:

time.sleep(1)

print('he,num=%d',num)

# 主进程会再次创建一个子进程,上面的子进程也会创建一个子进程

ret = os.fork()

if ret ==0:

print('aaaaa')

else:

print('bbbb')

`

python中多进程

如果你打算编写多进程的服务程序,Unix/Linux无疑是正确的选择。由于Windows没有fork调用,由于Python是跨平台的,当然也应该提供一个跨平台的多进程支持。 multiprocessing模块就是跨平台版本的多进程模块。 multiprocessing模块提供了一个Process类来代表一个进程对象

进程池调度

- 每次指定几个进程同时执行任务

`

from multiprocessing import Pool

import os

import time

def worker(num):

print('pid = %d,num = %d'%(os.getpid(),num))

time.sleep(2)

pool = Pool(3)

for i in range(10):

print('%d'%i)

pool.apply_async(worker,(i,))

pool.close()

pool.join()

`

apply_async非阻塞式调度,apply阻塞式调度

进程间通讯

任何进程间资源都是独立的,所有一切都是不可以共享的。实现资源共享、进程间通讯比较常用的方式就是Queue。

使用Queue可以解决Process创建的进程之间的通讯,但是无法解决进程池中进程之间通讯。

进程池进程之间的通讯需要使用Manager.Queue()创建的队列。

实现基于多进程的文件拷贝

`

# coding:utf-8

from multiprocessing import Pool,Manager

import os

def CopyFile(oldPath,newPath,fileName,queue):

fr = open(oldPath+'/'+fileName)

fw = open(newPath+'/'+fileName,'w')

# 当然如果是较大文件时,不要一次性读写

content = fr.read()

fw.write(content)

fr.close()

fw.close()

queue.put(fileName)

def Main():

oldPath = input('please input folder path:')

newPath = oldPath+'-backups'

os.makedirs(newPath)

fileNames = os.listdir(oldPath)

pool = Pool(5)

queue = Manager().Queue()

for name in fileNames:

pool.apply_async(CopyFile,args=(oldPath,newPath,name,queue))

num = 0

allNum = len(fileNames)

while num

queue.get()

num += 1

copyRate = num/allNum

print('\r当前copy进度:%.2f%%'%(copyRate*100),end='')

print('\n 已完成copy!')

if __name__ == '__main__':

Main()

`

micropython实现多任务_python多任务处理相关推荐

  1. python多进程_Python多任务处理(多进程篇)

    Python多任务处理(多进程篇) 项目地址: https://github.com/tushushu/flying-python​github.com 多进程处理CPU密集型任务 CPU密集型任务的 ...

  2. python多任务_python之多任务

    什么是多任务? 通俗点说就是同一时间干多件事. 多线程实例:我们在看电影的时候一般会吃爆米花,这是同时进行的, 首先没有多线程的情况 import time def movietheaters(): ...

  3. micropython教程下载_python教程之让micro:bit讲话

    在这个项目中使用的东西 硬件组件 BBCmicro:bit板×1 micro USB线×1 七号电池×1 鳄鱼夹×1 扬声器:0.25W,8欧姆×1 跳线(通用)×1 软件应用程序和在线服务 mu编辑 ...

  4. micropython 串口中断_python读取uart串口

    怎么通过UA串口接收多个字符? 希望功能:在这里小编想通过上位机向单片机发送2835,并通过串口返回,而每接收一个字符,单片机就会UA中断,在中断过程中,你把读取的那个SBUF字符,全部赋值给RxdD ...

  5. Linux 系统应用编程——进程基础

    一.Linux下多任务机制的介绍 Linux有一特性是多任务,多任务处理是指用户可以在同一时间内运行多个应用程序,每个正在执行的应用程序被称为一个任务. 多任务操作系统使用某种调度(shedule)策 ...

  6. android 7.0电视,将智能电视升级到Android 7.0有什么经验?为索尼用户祝福

    尽管Android 7.0系统很早以前就已正式发布,但实际上,由于Android设备的严重碎片化,并不是所有的Android设备都可以在第一时间进行升级,因此,实际上现在已经安装了Android 7. ...

  7. 程序员客栈:程序员的经纪人_对于程序员:如何处理干扰和打扰

    程序员客栈:程序员的经纪人 您好亲爱的做白日梦的人,将咖啡因变成可待因! 我希望您不会因为一些破坏性通知或来自队友的推荐而来到这里,打扰您"检查他发现的这篇很棒的文章". 在接下来 ...

  8. 对于程序员:如何处理干扰和打扰

    您好亲爱的做白日梦的人,将咖啡因变成可待因! 我希望您不会因为一些破坏性通知或来自队友的推荐而来到这里,打扰您"检查他发现的这篇很棒的文章". 在接下来的几段中,我将为您提供简短扼 ...

  9. pythontcp服务器如何关闭阻塞_python实现单线程多任务非阻塞TCP服务端

    本文实例为大家分享了python实现单线程多任务非阻塞TCP服务端的具体代码,供大家参考,具体内容如下 # coding:utf-8 from socket import * # 1.创建服务器soc ...

最新文章

  1. 面试环节:在浏览器输入 URL 回车之后发生了什么?(超详细版)
  2. 从find_vma和find_vma_prev看内核
  3. Arthas 实践——生产环境排查 CPU 飚高问题
  4. 几率大的REDIS面试题
  5. 好惨!程序员修电脑遇到了人生滑铁卢 | 每日趣闻
  6. B站焊武帝爆火出圈:纯手工拼晶体管自制CPU,耗时半年,可跑程序
  7. sjf调度算法_如何通过静态方法预测SJF调度中未来过程的突发时间?
  8. 备战春招:阿里一面,给了几条SQL,问需要执行几次树搜索操作?
  9. 【离散期末复习】:集合论
  10. nodejs 端口被占解决
  11. bug—jupyter notebook 连接不上kernel内核问题
  12. 计算机开机界面图片怎么修改,电脑win7系统怎么修改开机画面的方法
  13. 阅卷系统java语言_利用Python开发智能阅卷系统
  14. 【SpringBoot系列】最详细demo-- 集成Swagger2
  15. MySQL命令行中文显示乱码怎么办
  16. RoadMap:面向自动驾驶视觉定位的轻量级语义地图(ICRA2021)
  17. 阿里云硬盘挂载与扩容
  18. 论语读后感--论语与管理
  19. DNS 缓存查看以及清除(转载)
  20. 【Windows】Windows10家庭版永久关闭自动更新

热门文章

  1. gulp 常用插件汇总
  2. NYOJ 927 The partial sum problem 【DFS】+【剪枝】
  3. 使用Node.JS监听文件夹变化
  4. Firefly官方教程之Netconnect使用文档
  5. [C++基础]017_数据的存放
  6. 关于CS架构文件传输流的问题,文中代码都是转自网上,但可保证代码无无误...
  7. 【python自动化办公01】word操作-新建文档
  8. pandas 读csv 报错 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xca in position 0: invalid cont
  9. 读入两个字符串java_编写一个Java应用程序,从键盘读取用户输入两个字符串,并重载3个strAdd函数...
  10. 【网址收藏】hexo博客主题收藏