"""
现代操作系统都支持“多任务”
什么叫多任务??
操作系统同时可以运行多个任务
单核CPU实现多个任务原理:操作系统轮流让各个任务交替执行,QQ执行2us
切换到微信在执行2us,切换到momo,在执行2us....
表明是看,每个任务反复执行下去,但是CPU调度执行速度太快了,导致我们感觉每个任务在同时执行
多核CPU实现多任务原理:
真正的执行多任务只能在多核CPU上实现,但是由于任务数量远远多于CPU核心数量,所以,操作系统也会自动把很多个
任务轮流调度到每个核心上执行
并发:看上去一起执行,任务数多于CPU核心数
并行:真正一起执行,任务数小于CPU核心数
实现多任务的方式:
1、多进程模式(主要)
2、多线程模式
3、协程模式
4、多进程+多线程
多进程使用:
对于操作系统而言,一个任务就是一个进程
进程是系统中程序执行和资源分配的基本单位,每个进程都有自己的数据段
代码段,和堆栈段
"""
# cc2530 用多进程传递数据测试OK
#!/usr/bin/python
# -*-coding: utf-8 -*-
#Time:201807231
#Function:save achieve and savecc2530 data
# wxdial online,and send data to OneNet
#Environment:Raspi3B、cc2530、4G模块、USB转TTL、4GSIM
#Runing OK
#author@New
# 纯在个问题每次写文件会把cc2530.txt清空在写,方便读数据,但历史数据无法保存
# 实现每次串口读的数据,先保存到cc2530.txt,然后读cc2530.txt数据,http发送出去
# import serial
from multiprocessing import Process, Queue
import time
import os
# from multiprocessing import Process, Queue
# import urllib2
# import json
# import time
# import datetime
def read_serial(read_cc2530_data):
for chr in range(1,10) :
chr = '20180806-23.5-PH06-23'
read_cc2530_data.put(chr)
print('read_serial', chr)
time.sleep(1)
#把read_serial data 给save_cc2530 保存到本地
def save_cc2530(read_cc2530_data):
sensor_data = read_cc2530_data.get()
print('save_cc2530',sensor_data)
# 通过管道获取cc2530 data
fileObject = open('G:/cc2530.txt', 'w') # 注意:数据保存顺序及读取发送数据顺序
fileObject.write(sensor_data)
fileObject.close()
#将get_cc2530 换环后数据发送给OneNet
def http_put(read_cc2530_data):
# 通过管道获取cc2530 data
# send_data = read_cc2530_data.get()
# temp = float(file.read()) / 1000
# send_data = float(send_data) / 1000
# 向控制台打印结果
# print("CPU温度值为: %.3f" % send_data)
fileObject = open('G:/cc2530.txt', 'r') # 注意:数据保存顺序及读取发送数据顺序
send_data = fileObject.read()
print('http_put', send_data)
fileObject.close()
if __name__ == "__main__":
# 父进程创建队列。,并传递给子进程
read_cc2530_data = Queue()
rs = Process(target=read_serial, args=(read_cc2530_data,))
sv = Process(target=save_cc2530, args=(read_cc2530_data,))
hp = Process(target=http_put, args=(read_cc2530_data,))
rs.start()
sv.start()
hp.start()
rs.join()
sv.join()
hp.join()
# while True:
# pass