Tôi có một tập lệnh python chạy dài mà tôi muốn làm vào lúc 01:00 mỗi sáng.Kịch bản Python để làm điều gì đó cùng một lúc mỗi ngày
Tôi đã xem mô-đun sched và ở đối tượng Timer nhưng tôi không thể xem cách sử dụng các mục này để đạt được điều này.
Tôi có một tập lệnh python chạy dài mà tôi muốn làm vào lúc 01:00 mỗi sáng.Kịch bản Python để làm điều gì đó cùng một lúc mỗi ngày
Tôi đã xem mô-đun sched và ở đối tượng Timer nhưng tôi không thể xem cách sử dụng các mục này để đạt được điều này.
Bạn có thể làm điều đó như thế này:
from datetime import datetime
from threading import Timer
x=datetime.today()
y=x.replace(day=x.day+1, hour=1, minute=0, second=0, microsecond=0)
delta_t=y-x
secs=delta_t.seconds+1
def hello_world():
print "hello world"
#...
t = Timer(secs, hello_world)
t.start()
này sẽ thực hiện một chức năng (ví dụ hello_world.) Vào ngày hôm sau tại 01:00
Tôi cần thực hiện việc này * mỗi * buổi sáng ... –
Cuộc gọi lại có thể bắt đầu một 'Timer' khác khi được gọi lần đầu tiên. – FakeRainBrigand
sửa logic ngày: x = datetime.today() y = (x + timedelta (ngày = 1)). Thay thế (giờ = 2, phút = 0, giây = 0) delta_t = y - x –
APScheduler có thể là những gì bạn đang làm sau.
from datetime import date
from apscheduler.scheduler import Scheduler
# Start the scheduler
sched = Scheduler()
sched.start()
# Define the function that is to be executed
def my_job(text):
print text
# The job will be executed on November 6th, 2009
exec_date = date(2009, 11, 6)
# Store the job in a variable in case we want to cancel it
job = sched.add_date_job(my_job, exec_date, ['text'])
# The job will be executed on November 6th, 2009 at 16:30:05
job = sched.add_date_job(my_job, datetime(2009, 11, 6, 16, 30, 5), ['text'])
https://apscheduler.readthedocs.io/en/latest/
Bạn chỉ có thể lấy nó để lên lịch chạy khác bằng cách xây dựng đó vào chức năng bạn đang lên kế hoạch.
Tôi đã dành khá nhiều thời gian cũng tìm cách khởi chạy một chương trình Python đơn giản lúc 01:00. Vì một lý do nào đó, tôi không thể nhận được cron để khởi chạy nó và APScheduler có vẻ khá phức tạp đối với một thứ đơn giản. Lịch biểu (https://pypi.python.org/pypi/schedule) có vẻ đúng.
Bạn sẽ phải cài đặt thư viện Python của họ:
pip install schedule
này được sửa đổi từ chương trình mẫu của họ:
import schedule
import time
def job(t):
print "I'm working...", t
return
schedule.every().day.at("01:00").do(job,'It is 01:00')
while True:
schedule.run_pending()
time.sleep(60) # wait one minute
Bạn sẽ cần phải đặt chức năng riêng của bạn ở vị trí của công việc và chạy nó với nohup, ví dụ:
nohup python2.7 MyScheduledProgram.py &
Đừng quên khởi động lại nếu bạn khởi động lại.
Bất cứ ai nhìn thấy chuỗi này trong tương lai, hy vọng họ hiểu rằng đây là giải pháp phù hợp cho mã sản xuất chứ không phải là mã được chấp nhận. – yeaske
Điều này có hoạt động trên mac, linux và windows không? Hoặc kịch bản này cần một số sửa đổi? @yeaske – ppmakeitcount
Tôi sử dụng nó trên Linux và nó sẽ hoạt động trên mac. Windows, tôi không chắc chắn. Nó không phải là đầu tư lớn, tuy nhiên, để thiết lập và kiểm tra cẩn thận. Tôi sẽ khuyên rằng trong mọi trường hợp kể từ khi lên lịch là một chút khôn lanh. – user2099484
Tôi cần một cái gì đó tương tự cho một tác vụ. Đây là mã tôi đã viết: Nó tính toán ngày hôm sau và thay đổi thời gian cho bất cứ điều gì là cần thiết và tìm giây giữa currentTime và thời gian dự kiến tiếp theo.
import datetime as dt
def my_job():
print "hello world"
nextDay = dt.datetime.now() + dt.timedelta(days=1)
dateString = nextDay.strftime('%d-%m-%Y') + " 01-00-00"
newDate = nextDay.strptime(dateString,'%d-%m-%Y %H-%M-%S')
delay = (newDate - dt.datetime.now()).total_seconds()
Timer(delay,my_job,()).start()
Đồng thời xem xét chạy tập lệnh riêng biệt qua [cron] (http://en.wikipedia.org/wiki/Cron). – FakeRainBrigand
Có, nên nói, không có quyền truy cập vào 'cron'. –