Задача
Когда этот блок кода:
# main.py - this file gets run directly.
import sched
import time
scheduler = sched.scheduler(time.time, time.sleep)
print("before definition")
def do_something():
print("do_something is being executed.")
scheduler.enter(1, 5, do_something)
print("post definition")
scheduler.enter(1, 5, do_something)
# Do something, so that the program does not terminate.
do_not_terminate()
находится в вызываемом файле ( main.py ), он работает как положено (с функцией do_something, запускаемой каждую секунду.), Получая следующий вывод:
before definition
post definition
do_something is being executed.
do_something is being executed.
do_something is being executed.
do_something is being executed.
do_something is being executed.
do_something is being executed.
...
Но:
когда указанный выше блок помещается в отдельный файл ( someimport.py ) и someimport.py импортируется в main.py функции do_something no дольше исполняется. [Код выглядит так:]
# someimport.py - this file gets imported in main.py
import sched
import time
scheduler = sched.scheduler(time.time, time.sleep)
print("before definition")
def do_something():
print("do_something is being executed.")
scheduler.enter(1, 5, do_something)
print("post definition")
scheduler.enter(1, 5, do_something)
# main.py - this file get's run directly
import someimport
# Do something, so that the program does not terminate.
do_not_terminate()
Производятся только следующие выходные данные (и, конечно, сообщения об ошибках не появляются):
before definition
post definition
Я уже пробовал следующее:
1. Переключите
import someimport
на
from someimport import *
in
main.py
Это, как и ожидалось, ничего не изменило.
2. Поместите первый вызов
scheduler.enter в отдельную функцию (
run ), которая вызывается после импорта:
# someimport.py - this file gets imported in main.py
import sched
import time
scheduler = sched.scheduler(time.time, time.sleep)
print("before definition")
def do_something():
print("do_something is being executed.")
scheduler.enter(1, 5, do_something)
print("post definition")
def run():
scheduler.enter(1, 5, do_something)
# main.py - this file get's run directly
import someimport
someimport.run()
# Do something, so that the program does not terminate.
do_not_terminate()
Это ничего не изменило.
3. импортировать
sched и
время в
main.py , а также.
Как и ожидалось, это также не имело никакого эффекта.
Есть ли способ запланировать функцию do_something в someimport.py , без первого scheduler.enter в файле main.py.
Это то, чего я стараюсь избегать (так как в реальном проекте примерно 100 запланированных задач, подобных этой, и я пытаюсь очистить основной файл).
Весь приведенный выше код был протестирован на python 3.7.3 под GNU / Linux.
Заранее большое спасибо!