python выполнять функцию каждые n секунд ожидания завершения - PullRequest
1 голос
/ 16 марта 2020

Я хочу выполнять FUNCTION периодически каждые 60 секунд, но я не хочу выполнять FUNCTION снова, если предыдущий запуск еще не завершен. Если предыдущий прогон завершается, например, через 120 с, я хочу немедленно выполнить новый вызов FUNCTION. Если предыдущий запуск завершился, например, за 10 секунд, то я хочу подождать 50 секунд, прежде чем выполнить новый вызов FUNCTION.

Пожалуйста, ознакомьтесь с моей реализацией ниже.

Могу ли я добиться этого, например, с помощью subprocess.run или некоторых других библиотека timel oop, чтобы реализация была намного чище?

import time


def hello(x):
    # some logic here
    # execution could take any time between e.g. <10s, 120s>


def main(ii):
    while True:
        start = int(time.time())

        try:
            val = next(ii)
        except StopIteration as ex:
            return None

        else:
            hello(val)

            run_time_diff = int(time.time()) - start

            if run_time_diff < 60:
                time.sleep(60 - run_time_diff)


ii = iter(list[[...],[...],...[...]])
main(ii=ii)

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

возможно апшедулер мог бы помочь тебе. Но если ваша работа будет работать дольше, чем время ожидания, оно может быть пропущено. В этом случае вы можете увеличить количество работников.

import datetime
import time

from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()

def some_job():
    time.sleep(5)
    print(f"{datetime.datetime.utcnow()}: Every 10 seconds")


job = scheduler.add_job(some_job, 'interval', seconds=10, max_instances=1)

scheduler.start()
try:
    while True:
        time.sleep(1)
finally:
    scheduler.shutdown()
0 голосов
/ 16 марта 2020

в привет, вы положили return 0. и в основной функции, в то время как, в другом, вы ставите циклы, как я

x = hello(val)
if x = 0:
# Your custom code after function will be excute
  main()
else:
# Re-excute the function if it not work
  hello(val)

Но я не уверен, что мой x при определении, это извинит hello()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...