我在覆盆子pi上做这件事。我是python的新手,我最近从arduino转到了Rasberry,用于这个项目。
我想每隔5秒向db发送一次temp,但我想每1分钟更新一次图表。但是,图表不会更新它卡在writeLog中。我写了print" loop"在s.run之后但它没有表现出来。接下来我写了print" here"在writeLog中的s.enter()之后显示。
此外,我无法将plotNow置于sched中(错误不在主循环中)。我尝试过线程但是我无法获得60秒的循环。
这是我目前的代码:
from matplotlib import pyplot as plt
from datetime import datetime
import MySQLdb
import sched, time
s = sched.scheduler(time.time, time.sleep)
db = MySQLdb.connect(host="localhost", user="root", passwd="", db="log")
cur = db.cursor()
cnt = 0
tempC = []
plt.ion()
plt.figure(figsize=(10,5))
def writeLog(sc):
print "Insert to DB"
try:
st = "%.2f" % thermoTempC
cur.execute("""INSERT INTO history (Datetime, Temp_Degrees, Remarks) VALUES (%s, %s, %s)""", (datetime.now().strftime('%Y-%m-%d %H:%M:%S'), st, 'OK'))
db.commit()
except:
db.rollback()
s.enter(5,1,writeLog,(sc,))
def plotNow():
plt.clf()
plt.grid(True)
plt.title('Current Temp = {:.2f}$^\circ$C'.format(thermoTempC), fontsize=15)
plt.ylabel('Temperature(C)')
plt.xlabel('Time(min)')
plt.xlim(0,120)
plt.ylim(0,90)
plt.plot(tempC, 'r.-', label='Actual', color='red')
plt.legend(loc='upper right')
plt.show(block=False)
while True:
thermoTempC = "32.00"
tempC.append(thermoTempC)
plotNow()
plt.pause(.1)
cnt = cnt+1
if(cnt>120):
tempC.pop(0)
s.enter(5,1,writeLog,(s,))
s.run()
答案 0 :(得分:0)
我找不到我想要的重复问题,所以这是我的答案。
您可以使用threading
模块将每个进程放在一个线程中。
假设您有Route::get('/', function () {
return view('welcome');
});
Auth::routes();
Route::group(['middleware' => 'auth'], function () {
Route::group(['prefix' => 'admin'], function () {
Route::get('/', 'HomeController@index')->name('dashboard');
Route::get('/home', 'HomeController@index')->name('home');
Route::get('/users', 'UserController@index')->name('users');
});
});
和HomeController@index
个函数,它们分别执行一次发送温度的基本操作,并更新图形一次。
您需要定义两个将连续运行的函数:
Step 2:
Extract Images and store total_count in Dynamodb
Step 3:
At the end of Lambda increment new column current_count
if(current_count==total_count){ trigger Step 4 }
然后,为两个操作创建一个线程,并运行两个线程。
send_temp_db
不要忘记join你的一个主题。 如果不这样做,程序将在两个线程启动后立即退出。