2

ラズベリーパイで入力を待つためにスレッドを使用しているpythonスクリプトがあります。これまでにスレッドを使用したのはこれが初めてで、KeyboardInterrupt の処理に問題があります。それは実際には問題ではありませんが、ユーザーがプログラムの開始直後のように早い段階で control-c を押すと、Python がびっくりして、インポート エラーでいっぱいのコンソールを吐き出します。インポートを try -excepts でラップしようとしましたが、うまくいかないようです。これまでこの問題が発生したことがないので、スレッドに何か問題があると感じています。

すべてをtry-exceptsでラップすることに加えて、私も試しました:

from threading import Thread
cond = threading.Condition(threading.Lock())
cond.acquire()
cond.wait(None)

ロードされるまでキーボードの割り込みを許可しないと思われていましたか?

とにかくキーボード割り込みでpythonに何もさせないようにすることはありますか?

どんな助けでも大歓迎です。ありがとう!

私のコード:

import RPi.GPIO as GPIO
import pymysql as mysql
import time
import urllib.request
from threading import Thread

GPIO.setmode(GPIO.BOARD)
GPIO.cleanup()

class table():
    __slots__ = ['pin','num','time']

    def __init__(self, pin, num, time=0):
        self.pin = pin
        self.num = num
        self.time = time

# Room ID
room = 6

# time (minutes)
thetime = 38

# table Setup
tableList = [ \
    table(11,6), \
    table(13,2), \
    table(15,4), \
    table(19,5), \
    table(21,3), \
    table(23,1), \
    ]

def settable(table):
    with urllib.request.urlopen("http://time.zyphox.com") as url:
        curtime = int(url.read())+(thetime*60)

    con = mysql.connect(host="345", user="435", passwd="345435", db="34534543")
    cur = con.cursor()
    cur.execute("UPDATE tables SET time='"+str(curtime)+"' WHERE number='"+str(table)+"' AND id_room='"+str(room)+"'")
    cur.close()
    con.close()
    print("Setting table " + str(table) + " to " + str(thetime) + " minutes...")

def watchtable(table):
    GPIO.setup(table.pin, GPIO.IN)  
    while True:
        if(GPIO.input(table.pin)!=1 and table.time <= time.time()):
            settable(table.num)
            table.time = time.time() + 10

def main():
    print("Loading kitchen System...")
    for table in tableList:
            t = Thread(target=watchtable,args=(table,))
            t.daemon=True
            t.start()
    time.sleep(1)
    print("Successful!")

    while True:
        time.sleep(300)
        print("- Pinging MYSQL database.")

main()
4

0 に答える 0