Обычно функция function_1 () завершается за 10 часов. Но я хочу, чтобы функция function_1 () работала в течение 2 часов, а через 2 часа функция function_1 должна вернуться, и программа должна продолжить работу с функцией function_2 (). Он не должен ждать завершения функции function_1 (). Есть ли способ сделать это в Python?
alwbtc 6 Сен 2012 в 14:07
5 ответов
Лучший ответ
Что делает функции в Python способными прерывать их выполнение и возобновление, так это использование оператора yield — ваша функция будет тогда работать как объект-генератор. Вы вызываете метод «next» для этого объекта, чтобы он начинался или продолжался после последнего выхода
import time def function_1(): start_time = time.time() while True: # do long stuff running_time = time.time() -start_time if running_time > 2 * 60 * 60: # 2 hours yield # start_time = time.time() runner = function_1() while True: try: runner.next() except StopIteration: # function_1 had got to the end break # do other stuff
jsbueno 6 Сен 2012 в 15:00
Если вы не против оставить function_1 запущенным:
Уроки Python Как сделать задержку времени
from threading import Thread import time Thread(target=function_1).start() time.sleep(60*60*2) Thread(target=function_2).start()
Eric 6 Сен 2012 в 10:09
Вы можете рассчитать время выполнения, используя модуль datetime. Возможно, у вашей функции оптимизатора есть где-то цикл. Внутри цикла вы можете проверить, сколько времени прошло с момента запуска функции.
def function_1(): t_end = datetime.time.now() + datetime.timedelta(hours=2) while not converged: # do your thing if datetime.time.now() > t_end: return
Hans Then 12 Сен 2012 в 13:15
from multiprocessing import Process p1 = Process(target=function_1) p1.start() p1.join(60*60*2) if p1.is_alive():p1.terminate() function_2()
Надеюсь, это поможет
Я только что проверил это с помощью следующего кода
import time from multiprocessing import Process def f1(): print 0 time.sleep(10000) print 1 def f2(): print 2 p1 = Process(target=f1) p1.start() p1.join(6) if p1.is_alive():p1.terminate() f2()
Источник: question-it.com
Как я могу сделать задержку в Python?
Ну . это будет печататься реже, чем это, потому что требуется время, чтобы напечатать и обработать все необходимые буферы (возможно, переключение контекста ядра) и зарегистрировать сигнал тревоги, но . да. Немного меньше одного раза в минуту.
Parthian Shot 17 июнь 2015, в 19:29
при использовании tkinter в качестве графического пользовательского интерфейса sleep () не будет выполнять эту работу — вместо этого используйте after (): tkinter.Tk.after (yourrootwindow, 60000) или yourrootwindow.after (60000)
DonGru 03 авг. 2017, в 10:41
спасибо за это не смог понять что такое сон, еще раз спасибо.
Akash Kandpal 02 янв. 2018, в 16:28
Управление временем на python | Модуль time python (питон)
Стоит отметить, что в Windows наилучшая степень детализации, на которую вы можете надеяться, составляет около 0,015 секунд (15 мс). Большинство версий Linux на современных процессорах могут снизить детализацию до 0,001 секунды (1 мс).
SDsolar 31 март 2018, в 00:07
Artemis Fowl 10 апр. 2018, в 08:57
В самом деле. Комментарий tkinter лучше представить как ответ, а не как комментарий. Мы создаем базу данных, которая будет существовать в течение многих лет, люди будут находить ответы через Google, и многие люди никогда не будут читать комментарии. Это сделало бы даже новый замечательный вопрос. Что-то вроде «Как сделать задержку в Python при использовании tkinter» или подобное.
SDsolar 10 апр. 2018, в 15:29
Да, но что можно сказать о фактическом временном разрешении на разных платформах? Есть ли гарантии? Может ли разрешение быть 16,666 мс?
Peter Mortensen 14 июнь 2018, в 21:05
Показать ещё 6 комментариев
Вы можете использовать функцию sleep() в модуле времени. Может принимать аргумент с плавающей точкой для разрешения менее секунды.
from time import sleep sleep(0.1) # Time in seconds.
pobk 15 сен. 2008, в 17:04
Поделиться
Есть ли функция для пробуждения?
Elfin forest 09 апр. 2018, в 15:53
Neil Chowdhury 13 май 2018, в 02:44
Да, но что можно сказать о фактическом временном разрешении на разных платформах?
Есть ли гарантии? Может ли разрешение быть 16,666 мс?
Peter Mortensen 14 июнь 2018, в 21:02
Показать ещё 1 комментарий
Пожалуйста, прочтите это, что может помочь вам в дальнейшем:
Попробуйте функцию сна в модуле времени.
import time time.sleep(60)
И поставить это в while циклы и оператор будет выполняться только на минуту. Это позволяет запускать выражение в заранее определенные промежутки времени, независимо от того, как долго команда принимает ( до тех пор, как он занимает меньше минуты или 5 или 60 или как там у вас установлено) Например, я хотел запускать пинг раз в минуту. Если я просто time.sleep(60) или time.sleep(45) даже, пинг не всегда будет занимать одинаковое количество времени. Вот код 🙂
time.sleep(time.localtime(time.time())[5])
[5] просто извлекает секунды из возвращаемого значения time.localtime() .
Самое замечательное в time.sleep — он поддерживает числа с плавающей запятой!
import time time.sleep(0.1)
tehvan 04 фев. 2009, в 09:05
Поделиться
time.sleep(time.localtime(time.time())[5]) имеет никакого смысла вообще. Это будет ждать дольше, если будет меньше времени до следующей полной минуты. Если вы хотите подождать до конца текущей минуты, я бы предложил: time.sleep(-time.time() % 60) (это работает и с другими интервалами)
Stefan Paul Noack 08 дек. 2011, в 22:16
Немного веселья с сонным генератором.
Вопрос касается временной задержки. Это может быть фиксированное время, но в некоторых случаях нам может потребоваться задержка, измеренная с последнего времени. Вот одно из возможных решений:
Задержка, измеренная с последнего раза (просыпается регулярно)
Ситуация может заключаться в том, что мы хотим делать что-то как можно last_time , и мы не хотим беспокоиться о всех last_time , next_time за нашим кодом.
Генератор зуммера
Следующий код (sleepy.py) определяет генератор buzzergen :
import time from itertools import count def buzzergen(period): nexttime = time.time() + period for i in count(): now = time.time() tosleep = nexttime — now if tosleep > 0: time.sleep(tosleep) nexttime += period else: nexttime = now + period yield i, nexttime
Вызов регулярного buzzergen
from sleepy import buzzergen import time buzzer = buzzergen(3) # Planning to wake up each 3 seconds print time.time() buzzer.next() print time.time() time.sleep(2) buzzer.next() print time.time() time.sleep(5) # Sleeping a bit longer than usually buzzer.next() print time.time() buzzer.next() print time.time()
И запустив его, мы видим:
1400102636.46 1400102639.46 1400102642.46 1400102647.47 1400102650.47
Реализация задержки времени в Python
Часто при написании кода на Python возникает потребность в создании задержки времени. Например, при создании автоматизированного скрипта, который должен выполнять определенные действия через определенные промежутки времени. Это может быть необходимо, например, для того, чтобы не перегружать сервер запросами или просто для имитации реального поведения пользователя.
Для реализации задержки времени в Python используется модуль time и его функция sleep().
Использование функции sleep()
Функция sleep() из модуля time приостанавливает выполнение программы на заданное количество секунд.
import time print(‘Hello’) time.sleep(3) # Приостановка на 3 секунды print(‘World’)
В этом примере между выводами ‘Hello’ и ‘World’ будет пауза в 3 секунды.
Особенности использования функции sleep()
Важно помнить, что функция sleep() приостанавливает весь поток выполнения программы. Это означает, что во время задержки программа не будет ничего делать, включая обработку ввода пользователя или любых других событий.
Если нужно, чтобы программа продолжала работать во время задержки (например, обрабатывать ввод пользователя), то следует использовать многопоточность или асинхронное программирование. Но это уже тема для более продвинутых уроков.
В любом случае, функция sleep() является простым и эффективным методом для создания задержек времени в Python.
Источник: sky.pro