python学習ノート01マルチプロセス実装(一)データ転送

2688 ワード

"""
現代のオペレーティングシステムでは、マルチタスクがサポートされています.
マルチタスクって何ですか?
複数のタスクを同時に実行できるオペレーティングシステム
 
シングルコアCPUは複数のタスク原理を実現する:オペレーティングシステムは順番に各タスクを交互に実行させ、QQは2 usを実行する
微信に切り替える2 us、momoに切り替える2 us...を実行する.
各タスクは繰り返し実行されますが、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