python 多进程实现(一)数据传递

"""

现代操作系统都支持“多任务”

什么叫多任务??

操作系统同时可以运行多个任务

单核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




如果疑问,欢迎留言交流,不定期查看谢谢。

                                   分享不易,一分一毛都是激励

猜你喜欢

转载自blog.csdn.net/qq_40025335/article/details/81563140
今日推荐