2016-01-04 2 views
2

У меня есть функция для выполнения некоторой работы. Код должен повторять 130 миллионов раз.Запускать скрипт Python каждые 10 секунд

В настоящее время я использую Crontab для запуска скрипта python каждые 1 мин. Это занимает слишком много времени, я хочу, чтобы этот скрипт python запускался, когда я запускал его в первый раз и постоянно повторял, пока работа не закончится. Я хочу разделить 10 секунд между двумя задачами. Как я могу это сделать?

+0

Если теперь вы используете cron, вы можете сделать цикл в скрипте оболочки и спать в течение 5 секунд. См. [Здесь] (http://www.thegeekstuff.com/2011/07/cron-every-5-minutes/) как это сделать – Pynchia

ответ

5

Попробуйте сделать schedule модуль

import schedule 
import time 

def job(): 
    print("I'm working...") 

schedule.every(10).minutes.do(job) 
schedule.every().hour.do(job) 
schedule.every().day.at("10:30").do(job) 

while 1: 
    schedule.run_pending() 
    time.sleep(1) 

Просто запустите: pip install schedule

+0

Может ли он работать в фоновом режиме. Например, я создаю do_my_job.py, используя ваш метод, в строке ssh cmd run «python do_my_job.py» можно закрыть терминал ssh? –

+0

@jianbingMa Это поможет вам http://askubuntu.com/questions/396654/how-to-run-the-python-program-in-the-background-in-ubuntu-machine –

4

Я думаю, вы должны использовать этот метод:

import time 

while True: 
    # code goes here 
    time.sleep(10) 

На самом деле это не правильно использовать while True, поскольку она вызывает бесконечный цикл. Там должно быть условие. Но поскольку вы не предоставили достаточно данных, я не могу этого сделать.

+0

Я так не думаю. Пожалуйста, снова проверьте вопрос и посмотрите, что хочет OP. –

+0

'и спать 10 или менее секунд'. Это то, чего он хочет. Эта функция останавливает выполнение кода в течение заданного времени. –

1

Один из подходов может быть использование потоков, запустить поток через каждые N секунд. Поскольку обработка считается световой, что может быть решением.

t=threading.timer(10,function,[function_arguments]) #executes your_function every 10 seconds (example only) 
while True: 
    t.start() 

Имейте в виду, что недостаток этого решения заключается в том, что если функция() занимает больше времени, чтобы обработать чем seconds_parameter вы, вероятно, параллелизм проблемы.

+0

Это только Python 2? –

+0

Согласно питона документации это на 2,7 и 3,1 – miguels

+0

'>>> импорт многопоточных >>> threading.timer Traceback (самый последний вызов последнего): Файл "", строка 1, в threading.timer AttributeError : объект 'module' не имеет атрибута 'timer'' –

-1

Как работает поток python?
, например, если материал для работы на определен в каком-то списке я хотел бы предложить следующий подход:

import time 
work = ["list", "of", "jobs", "here"] 
for job in work: 
    # do something with the job 
    time.sleep(10) 

таким образом цикл будет выхода, как только нет больше работы, чтобы сделать.

+0

Откуда вы знаете, что «работа» - это «список»?Разве это не может быть операция повторения? –

+0

, потому что формулировка исходного вопроса указала, что работа может закончиться - «Она всегда будет работать, пока не будет никакой работы». –

+0

Я сделал предположение, что если это может закончиться, это должно быть какая-то очередь/список/генератор –

0

Вы можете посмотреть Supervisor. Это не очень сложно использовать. Вы должны запланировать свой процесс.

Вы можете добавить требуемое время сна в сценарий.

import time 

def job() 
    # tasks of the script 

if __name__ == '__main__': 
    while True: 
     job() 
     time.sleep(10) 

Функция job() будет работать каждые 10 секунд.

Смежные вопросы