• XSS.stack #1 – первый литературный журнал от юзеров форума

Как добавить остановку скрипта в Python?

Пожалуйста, обратите внимание, что пользователь заблокирован
На Линуксах можно использовать timeout, типа "timeout 30s python myscript.py" или что-то такое. Или тебе в самом скрипте нужно сделать? В таком случае нужно в сигналах искать скорее всего, тк потоки в питоне штатным образом не остановишь. Если можно просто рухнуть после этого времени, то создаешь поток, делаешь join с указанием времени. По выходу из join проверяешь вышел ли поток или нет, если нет, то выбрасываешь исключение и скрипт остановится. Можно еще мультипроцессингом обойтись, но тогда скрипт будет форкать новый процесс.
 
На Линуксах можно использовать timeout, типа "timeout 30s python myscript.py" или что-то такое. Или тебе в самом скрипте нужно сделать? В таком случае нужно в сигналах искать скорее всего, тк потоки в питоне штатным образом не остановишь. Если можно просто рухнуть после этого времени, то создаешь поток, делаешь join с указанием времени. По выходу из join проверяешь вышел ли поток или нет, если нет, то выбрасываешь исключение и скрипт остановится. Можно еще мультипроцессингом обойтись, но тогда скрипт будет форкать новый процесс.
спасибо, выручил
 
На Линуксах можно использовать timeout, типа "timeout 30s python myscript.py" или что-то такое. Или тебе в самом скрипте нужно сделать? В таком случае нужно в сигналах искать скорее всего, тк потоки в питоне штатным образом не остановишь. Если можно просто рухнуть после этого времени, то создаешь поток, делаешь join с указанием времени. По выходу из join проверяешь вышел ли поток или нет, если нет, то выбрасываешь исключение и скрипт остановится. Можно еще мультипроцессингом обойтись, но тогда скрипт будет форкать новый процесс.

Быстро понял, откуда у быка рога)
 
В пайтоне есть функц. timeout(), как было сказано выше, есть еще способ для линуксоидов, это простенький bash скрипт


Bash:
#!/bin/bash

until python test.py
do
    echo "Restarting"
    sleep 1
done

P.S иногда почему-то у меня timeout не работал, я юзал баш
 
На Линуксах можно использовать timeout, типа "timeout 30s python myscript.py" или что-то такое. Или тебе в самом скрипте нужно сделать? В таком случае нужно в сигналах искать скорее всего, тк потоки в питоне штатным образом не остановишь. Если можно просто рухнуть после этого времени, то создаешь поток, делаешь join с указанием времени. По выходу из join проверяешь вышел ли поток или нет, если нет, то выбрасываешь исключение и скрипт остановится. Можно еще мультипроцессингом обойтись, но тогда скрипт будет форкать новый процесс.
Вставлю свои 5 копеек, если я не ошибаюсь то при распараллеливании огромное значение также имеет что именно за 'код' будет работать в каждом треде(звучит наверное немного странно), так как например при попытке использовать 'dlib' в каждом отдельном потоке у меня всегда все вылетало наглухо, с какими только опциями я его не пробовал собирать, как только я не пробовал стартовать потоки итд(убил кучу времени).
А вот например с 'multiprocessing' все отлично работает, единственное что прирост в скорости совсем мизерный :))
 
There is a script that should stop after 1min
I'm new, I couldn't find the information I needed on the internet.
Sorry if I speak english but you can use the sleep function, you first have to import the "sleep module": 'from time import sleep'.
After this you simply write sleep() the number in ( ) is the seconds you want the script to wait/sleep, for example sleep(10) = sleep 10 seconds
To exit the script you can simply write exit()
example:
Python:
from time import sleep

print('I am going to wait 3 seconds')
sleep(3)
print('I printed this after 3 seconds!')
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
you first have to intall the 'time' library "using pip install time" in cmd
Time module is preinstalled.
 
Python:
from threading import Timer
from _thread import interrupt_main as Stop
from time import sleep as Sleep
from sys import exit as Exit

def do_something():
    for i in range(10): # 10 секунд для наглядности 
        Sleep(1)
        print(i)

if __name__ == '__main__':
    timer = Timer(5, Stop) # 5 замени на 60 (секунд)
    timer.start()
    try:
        do_something()
    except KeyboardInterrupt:
        Exit()
 
Последнее редактирование:
my bad, but the code still works
Yeah, your code works. It just does not do, what was asked - terminating execution of main function after exact period of time.
 
Резиновый член верно сказал, единственным верным решением будет юзать сигнал

Код:
    signal.signal(signal.SIGALRM, handler)
    signal.alarm(60)
 
Есть скрипт, который должен остановиться через 1мин
Я новичок, в инете не нашел нужной мне информации
есть библиотека schedule, https://tirinox.ru/schedule-cron-python/
она тебе поможет в твоих задачах
 
Yeah, your code works. It just does not do, what was asked - terminating execution of main function after exact period of time.
this script is better:

Python:
from time import sleep

def loop():
  print("Hello World!")
  sleep(3)
  return

#makes function say "Hello World!" and then stop after 3 seconds without stopping whole python code
 
Пожалуйста, обратите внимание, что пользователь заблокирован
this script is better
Reread the Pernat1y's message, you don't understand what should be done in this topic, it has nothing to do with sleeping the thread, it is about breaking the thread's execution after a period of time.
 
Есть скрипт, который должен остановиться через 1мин
Я новичок, в инете не нашел нужной мне информации
Python:
from datetime import datetime, timedelta
from time import sleep

def loop():
    end_time = datetime.now() + timedelta(seconds=3)
    while datetime.now() < end_time:
        #do something here
        print('hello world')
        sleep(0.3)

loop()
 
Сейчас бы библиотеку для простой задачи.
библиотека и одна строчка кода для новичка, мне кажется, будет оптимальным решением, нежели писать стену кода ради того, чтобы программа остановилась.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх