導かれたインスタンスを制御するためのPythonポーリングメカニズム

私はあまりナンセンスを言うつもりはありません、誰もがコードを見るだけです!

# - *- coding:utf-8-*- 
# File: ceshitianqi
 
import urllib2
import json
import time
import datetime
import serial 
import random
import os
import sys
 
APIKEY ='ZPdLyl***=' #APIKEYに変更します
ser=serial.Serial("/dev/ttyUSB2",9600,timeout=1)
 
def read(key):
 ser.write(key)print("output:"+key)
 time.sleep(1)
 response = ser.readall()print(response)print(type(response))return response
 
def http_put(key):
 val =read(key) #Arduinoデータを取得する
 CurTime = datetime.datetime.now()
 url='http://api.heclouds.com/devices/**1/datapoints'
 # values={'datastreams':[{"id":"temp","datapoints":[{"at":CurTime.isoformat(),"value":val}]}]}print(type(val))if key=="a":
 values={'datastreams':[{"id":"humidity","datapoints":[{"at":CurTime.isoformat(),"value":val}]}]}if key=="b":
 values={'datastreams':[{"id":"temperature","datapoints":[{"at":CurTime.isoformat(),"value":val}]}]}
 jdata = json.dumps(values)         #JSON形式とエンコードデータ
 # jsonコンテンツを印刷する
 print jdata
 request = urllib2.Request(url, jdata)
 request.add_header('api-key', APIKEY)
 request.get_method = lambda:'POST'     #HTTPアクセス方法を設定する
 request = urllib2.urlopen(request)return request.read()  
 
str =("a","b")while True:for i in str: 
		f =open('1.txt')
		e = f.read()if e =="1\n":
			ser.write("c")if e =="0\n":
			ser.write("d")
 
		f.close()  
		resp =http_put(i)
 		time.sleep(2)

ポーリング1.txt

1 ライトアップ

0 次に閉じます

補足知識:パイソンノート(ポーリング、ロングポーリング)

1つ、ポーリング

views.py

from flask import Flask,render_template,request,jsonify

app =Flask(__name__)

USERS ={'1':{'name':'ベイブ','count':1},'2':{'name':'小さな北東','count':0},'3':{'name':'彼はWeiming','count':0},}

@ app.route('/user/list')
def user_list():import time
 returnrender_template('user_list.html',users=USERS)

@ app.route('/vote',methods=['POST'])
def vote():
 uid = request.form.get('uid')
 USERS[uid]['count']+=1return"成功した投票"

@ app.route('/get/vote',methods=['GET'])
def get_vote():returnjsonify(USERS)if __name__ =='__main__':
 app.run(threaded=True)

html

<! DOCTYPE html 
< html lang="zh-CN"<head 
 < meta charset="UTF-8"<title Title</title 
 < meta name="viewport" content="width=device-width, initial-scale=1"<style 
 li{
  cursor: pointer;}</style 
< /head 
< body 
 < ul id="userList"{%for key,val in users.items()%}<li uid="{{key}}"{{val.name}}({{val.count}})</li 
 { % endfor %}</ul 

 < script src="https://cdn.bootcss.com/jquery/3.3.0/jquery.min.js"</script 
 < script 

 $(function(){$('#userList').on('dblclick','li',function(){var uid =$(this).attr('uid');
  $.ajax({
   url:'/vote',
   type:'POST',
   data:{uid:uid},
   success:function(arg){
   console.log(arg);}})});});/*
 投票情報を取得する
  * /functionget_vote(){
  $.ajax({
  url:'/get/vote',
  type:"GET",
  dataType:'JSON',
  success:function(arg){$('#userList').empty();
   $.each(arg,function(k,v){var li = document.createElement('li');
   li.setAttribute('uid',k);
   li.innerText = v.name +"("+ v.count +')';$('#userList').append(li);})}})}setInterval(get_vote,3000);</script 
< /body 
< /html 

2.長いポーリング

views.py

from flask import Flask,render_template,request,jsonify,session
import uuid
import queue

app =Flask(__name__)
app.secret_key ='asdfasdfasd'

USERS ={'1':{'name':'ベイブ','count':1},'2':{'name':'小さな北東','count':0},'3':{'name':'彼はWeiming','count':0},}

QUEQUE_DICT ={}

@ app.route('/user/list')
def user_list():
 user_uuid =str(uuid.uuid4())
 QUEQUE_DICT[user_uuid]= queue.Queue()

 session['current_user_uuid']= user_uuid
 returnrender_template('user_list.html',users=USERS)

@ app.route('/vote',methods=['POST'])
def vote():
 uid = request.form.get('uid')
 USERS[uid]['count']+=1for q in QUEQUE_DICT.values():
 q.put(USERS)return"成功した投票"

@ app.route('/get/vote',methods=['GET'])
def get_vote():
 user_uuid = session['current_user_uuid']
 q = QUEQUE_DICT[user_uuid]

 ret ={'status':True,'data':None}try:
 users = q.get(timeout=5)
 ret['data']= users
 except queue.Empty:
 ret['status']= False

 returnjsonify(ret)if __name__ =='__main__':
 app.run(threaded=True)

html

<! DOCTYPE html 
< html lang="zh-CN"<head 
 < meta charset="UTF-8"<title Title</title 
 < meta name="viewport" content="width=device-width, initial-scale=1"<style 
 li{
  cursor: pointer;}</style 
< /head 
< body 
 < ul id="userList"{%for key,val in users.items()%}<li uid="{{key}}"{{val.name}}({{val.count}})</li 
 { % endfor %}</ul 

 < script src="https://cdn.bootcss.com/jquery/3.3.0/jquery.min.js"</script 
 < script 

 $(function(){$('#userList').on('click','li',function(){var uid =$(this).attr('uid');
  $.ajax({
   url:'/vote',
   type:'POST',
   data:{uid:uid},
   success:function(arg){
   console.log(arg);}})});get_vote();});/*
 投票情報を取得する
  * /functionget_vote(){
  $.ajax({
  url:'/get/vote',
  type:"GET",
  dataType:'JSON',
  success:function(arg){if(arg.status){$('#userList').empty();
    $.each(arg.data,function(k,v){var li = document.createElement('li');
    li.setAttribute('uid',k);
    li.innerText = v.name +"("+ v.count +')';$('#userList').append(li);})}get_vote();}})}</script 
< /body 
< /html 

上記のPythonポーリングメカニズム制御の例は、エディターによって共有されるすべてのコンテンツです。参照を提供したいと思います。

Recommended Posts

導かれたインスタンスを制御するためのPythonポーリングメカニズム
01.Pythonの概要
Pythonの紹介
Centos 6.4 python2.6を2.7にアップグレード
Centos 6.4 python2.6を2.7にアップグレード
Pythonガベージコレクションメカニズム