2012-07-17 12 views
9

मैं किसी दिए गए समय पर पायथन में कोई फ़ंक्शन कैसे चला सकता हूं?पायथन - दिए गए समय पर एक फ़ंक्शन प्रारंभ करें

उदाहरण के लिए:

run_it_at(func, '2012-07-17 15:50:00') 

और यह 2012-07-17 15:50:00 पर समारोह func चलेंगे।

मैंने sched.scheduler की कोशिश की, लेकिन यह मेरा कार्य शुरू नहीं हुआ।

import time as time_module 
scheduler = sched.scheduler(time_module.time, time_module.sleep) 
t = time_module.strptime('2012-07-17 15:50:00', '%Y-%m-%d %H:%M:%S') 
t = time_module.mktime(t) 
scheduler_e = scheduler.enterabs(t, 1, self.update,()) 

मैं क्या कर सकता हूं?

+1

क्या ऑपरेटिंग सिस्टम? आपको इसे पाइथन से बाहर के कार्यक्रम के साथ चलाने की आवश्यकता होगी, जैसे यूनिक्स पर क्रॉन। –

+0

क्यों नहीं? आपने 'एंटर' के लिए क्या देरी निर्धारित की है (मान लीजिए कि आपने जो कोशिश की है)? –

+0

आपने 'sched.scheduler' का उपयोग करने का प्रयास कैसे किया? – geoffspear

उत्तर

11

http://docs.python.org/py3k/library/sched.html से डॉक्स पढ़ना:

से है कि हम एक देरी बाहर काम करने के (सेकंड में) की जरूरत जा रहे हैं ...

from datetime import datetime 
now = datetime.now() 

तब 2012-07-17 15 पार्स करने के लिए 'datetime.strptime का उपयोग : 50: 00 '

# I'm just creating a datetime in 3 hours... (you'd use output from above) 
from datetime import timedelta 
run_at = now + timedelta(hours=3) 
delay = (run_at - now).total_seconds() 

फिर आप delay का प्रयोग कर एक threading.Timer उदाहरण में पारित करने के लिए कर सकते हैं, उदाहरण के लिए (मैं आप के लिए प्रारूप स्ट्रिंग छोड़ देंगे):

threading.Timer(delay, self.update).start() 
+2

स्थानीय समय पर डेटाटाइम अंकगणित विफल हो सकता है यदि स्थानीय टाइमज़ोन का यूटीसी ऑफसेट 'अब' और 'run_at' के बीच बदल गया है, उदाहरण के लिए, डीएसटी संक्रमण के आसपास। गणना करने के लिए स्थानीय समय को यूटीसी या पॉज़िक्स टाइमस्टैम्प में कनवर्ट करें। देखें [पता लगाएं कि 24 घंटे बीतने के बीच पास हो गए हैं - पायथन] (http://stackoverflow.com/a/26313848/4279)। – jfs

+0

आप 'timedelta' पर सीधे 'total_seconds' का उपयोग कर सकते हैं:' datetime.timedelta (hours = 3) .total_seconds() ' – Spela

13

उन्नत अजगर समयबद्धक, APScheduler पर एक नज़र डालें: http://packages.python.org/APScheduler/index.html

वे सिर्फ इस USECASE के लिए एक उदाहरण है: http://packages.python.org/APScheduler/dateschedule.html

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']) 
+1

पायथन 3 पर काम नहीं करता है – Anarach

2

मैं एक ही मुद्दा में भाग: मैं कर सकता sched.enterabs के साथ sched.run द्वारा पहचाने जाने के लिए पूर्णकालिक ईवेंट प्राप्त नहीं करें। sched.enter मेरे लिए काम किया अगर मैंने delay की गणना की, लेकिन उपयोग करने के लिए अजीब है क्योंकि मैं विशेष समय क्षेत्रों में दिन के विशिष्ट समय पर नौकरी चलाने के लिए चाहता हूं।

मेरे मामले में, मैंने पाया है कि मुद्दा यह था कि डिफ़ॉल्ट timefuncsched.scheduler प्रारंभकर्ता में time.time नहीं है (example के रूप में), बल्कि time.monotonic है। time.monotonicdocs से "पूर्ण" समय सारणी के लिए कोई समझ नहीं लेता है, "लौटाए गए मान का संदर्भ बिंदु अपरिभाषित है, ताकि लगातार कॉल के परिणामों के बीच केवल अंतर मान्य हो।"

मेरे लिए समाधान के रूप में

scheduler = sched.scheduler(time.time, time.sleep)

यह स्पष्ट नहीं है कि क्या आपके time_module.time वास्तव में time.time या time.monotonic है अनुसूचक प्रारंभ करने में था, लेकिन यह ठीक काम करता है जब मैं इसे उचित रूप से प्रारंभ ।

1
dateSTR = datetime.datetime.now().strftime("%H:%M:%S") 
if dateSTR == ("20:32:10"): 
    #do function 
    print(dateSTR) 
else: 
    # do something useful till this time 
    time.sleep(1) 
    pass 

बस दिन/दिनांक घटना ट्रिगर की एक समय की तलाश में: तक यह तिथि "स्ट्रिंग" एक अद्यतन "समय" से जुड़ा हुआ है स्ट्रिंग, यह एक साधारण टॉड समारोह के रूप में काम करता है। आप स्ट्रिंग को किसी दिनांक और समय तक बढ़ा सकते हैं।

चाहे उसकी लेक्सिकोोग्राफिक ऑर्डरिंग या क्रोनोलॉजिकल ऑर्डर तुलना, जब तक स्ट्रिंग समय में एक बिंदु का प्रतिनिधित्व करती है, तो स्ट्रिंग भी होगी।

String Comparison Technique Used by Python

1

इस पुस्तकालय स्थापित करने के लायक हो सकता है:

किसी कृपया इस लिंक की पेशकश की https://pypi.python.org/pypi/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) 
schedule.every().monday.do(job) 
schedule.every().wednesday.at("13:15").do(job) 

while True: 
    schedule.run_pending() 
    time.sleep(1) 
संबंधित मुद्दे