хотя цикл не останавливается через некоторое время - PullRequest
0 голосов
/ 15 ноября 2018

Привет, у меня есть мой код, который подключен к моему графическому интерфейсу tkinter, и я прочитал, что tkinter зависает, когда в нем есть цикл, поскольку он также является циклом. Итак, что я пытаюсь сделать, это дать этой функции некоторое время, например, 45 секунд, а затем разорвать цикл по истечении этого времени. Я также пробовал многопоточность, но я знаю, как правильно ее реализовать, поэтому и придумала это решение. Но после того, как я попробовал это, цикл не прерывается через 45 секунд. Что я делаю неправильно? Будет ли это работать? Заранее большое спасибо. Я просмотрел много уроков по многопоточности и очередям, но для начинающего, как я, это очень сложно, поэтому, если это возможно, пожалуйста, помогите мне. Еще раз спасибо!

import serial

port = '/dev/ttyUSB0'
balance = 0
timeout = time.time() + 45


#get Pulse from Arduino
def getPulse():
    try:
        ser = serial.Serial(port, 9600)
        while True:
            read = ser.readline()
            try:
                value = int(read, 10)
                if (value != 0):
                    print(value)
                    break
            except ValueError:
                pass
        finally:
            return value

#Update Balance

def balanceCounter(coins):
    total = 0
    total += coins
    return total


def getCoins():
    pulse = getPulse()
    coinvalue = 0

    if pulse == 1:
        coinvalue = 1
        print("1 Inserted")
    elif pulse == 5:
        coinvalue = 5
        print("5 Inserted")
    elif pulse == 10:
        coinvalue = 10
        print("10 Inserted")

    return coinvalue

def mainCounter(numpages):
    global balance
    #input target Sample Amount
    targetValue = numpages
    tbalance = 0

    try:
        while tbalance <= int(targetValue):
            coins = getCoins()
            balance = balanceCounter(coins)
            tbalance += balance
            print("Total balance : "+str(tbalance))
            if tbalance >= int(targetValue) or time.time() > timeout:
                break
    finally:
                return tbalance
...