Увеличьте время ожидания после выполнения скрипта Python во время его работы - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть простой код на Python.Он что-то делает, и он спит х секунду, и он снова делает что-то другое.Я хочу увеличить это время ожидания после выполнения файла.

Например,

print("A")
time.sleep(x)
print("B")

После выполнения кода я хочу изменить и увеличить время ожидания до того, как он напечатает B.

Возможно ли это?Пожалуйста помоги.Благодарю.

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

В этом решении используется список с временем ожидания, которое вы можете увеличить, добавив дополнительные сны, пока ваша целевая функция находится в спящем режиме.Функция sleep_all просто выскакивает и выполняет любой доступный сон из этого списка.

import time
from datetime import datetime
from threading import Thread, current_thread


def f():
    print(f'{datetime.now()}: A')
    sleep_all()
    print(f'{datetime.now()}: B')


def sleep_all():
    sleeps = current_thread().sleeps
    while sleeps:
        sleep = sleeps.pop()
        print(f'{datetime.now()}: taking a nap for {sleep} s')
        time.sleep(sleep)


if __name__ == '__main__':


    t = Thread(target=f)
    t.sleeps = [5]  # attach instance attribute with sleeps-list
    t.start()
    time.sleep(2)
    print(f'{datetime.now()}: adding another sleep')
    t.sleeps.append(5)

Пример Вывод:

2018-12-07 22:54:09.733494: A
2018-12-07 22:54:09.733553: taking a nap for 5 s
2018-12-07 22:54:11.735635: adding another sleep
2018-12-07 22:54:14.734963: taking a nap for 5 s
2018-12-07 22:54:19.738833: B

Process finished with exit code 0

Версия с подклассами Thread:

import time
from datetime import datetime
from threading import Thread


class Program(Thread):

    def __init__(self, sleep=None):
        super().__init__()
        self._sleeps = [sleep]

    def run(self):
        print(f'{datetime.now()}: A')
        self._sleep_all()
        print(f'{datetime.now()}: B')

    def add_sleep(self, sleep):
        self._sleeps.append(sleep)

    def _sleep_all(self):
        while self._sleeps:
            sleep = self._sleeps.pop()
            print(f'{datetime.now()}: taking a nap for {sleep} s')
            time.sleep(sleep)


if __name__ == '__main__':

    prg = Program(sleep=5)
    prg.start()
    time.sleep(2)
    print(f'{datetime.now()}: adding another sleep')
    prg.add_sleep(sleep=5)
    prg.join()
0 голосов
/ 08 декабря 2018
#!/usr/bin/env python

import time

try:
    with open(".sleeptime") as f:
        sleep_time = float(f.read())
except FileNotFoundError:
    sleep_time = 5.0

with open(".sleeptime", "w") as f:
    next_sleep_time = sleep_time + 5.0
    f.write(str(next_sleep_time))

print("A")
time.sleep(sleep_time)
print("B")
...