Запустите синхронизированную функцию перед продолжением цикла while - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь вызвать функцию, используя threading.timer в пределах while loop, я ожидаю, что она сначала остановит цикл while и подождет, пока функция в таймере не запустится, затем продолжит цикл. Но, похоже, мои ожидания и мой код не совпадают друг с другом. Буду признателен за помощь в этом. Thanx

код:

import threading

def test():
    print("Updating....")

def cont():
    arg = raw_input("Update File(y/n): ")
    print(arg)
    if arg == 'y':
        return True
    else:
        return False

def printit():
    while cont():
        print("Auto update every 10 sec!")
        threading.Timer(10.0, test).start()

    print('now its false')


printit()

Я хочу, чтобы test() был вызван первым, прежде чем снова запустить цикл.

1 Ответ

0 голосов
/ 30 августа 2018

Текущее поведение ожидается, потому что вы используете библиотеку threading. Когда вы делаете threading.Timer(10.0, test).start(), вы запускаете новый поток, который будет ждать 10 секунд, а затем запускает test. Но так как это новый поток, а не базовый поток, в котором вы выполняли свой цикл, он не будет ждать - это то, что происходит в асинхронном программировании.

Если вы хотите, чтобы ваш код выполнялся синхронно , вы можете использовать простой time.sleep для этого:

import time

def printit():
    while cont():
        print("Auto update every 10 sec!")
        time.sleep(10.0)
        test()

    print('now its false')
...