2012-09-13 12 views
13

apscheduler को मैं apscheduler उपयोग कर रहा हूँ और मैं हैंडलर समारोह कहा जाता हो जाता है कि जब अनुसूचित नौकरी शुरू की है करने के लिए मानकों में पारित करने के लिए कोशिश कर रहा हूँ:गुजर मानकों हैंडलर समारोह

from apscheduler.scheduler import Scheduler 
import time 

def printit(sometext): 
    print "this happens every 5 seconds" 
    print sometext 

sched = Scheduler() 
sched.start() 

sometext = "this is a passed message" 
sched.add_cron_job(printit(sometext), second="*/5") 

while True: 
    time.sleep(1) 

यह मेरे निम्नलिखित त्रुटि देता है कर:

TypeError: func must be callable 

क्या फ़ंक्शन हैंडलर में पैरामीटर पास करना संभव है। यदि नहीं, तो क्या कोई विकल्प हैं? असल में, मुझे शेड्यूल बनाने पर एक स्ट्रिंग वापस करने के लिए प्रत्येक निर्धारित नौकरी की आवश्यकता होती है। धन्यवाद!

उत्तर

12

printit(sometext) कॉल करने योग्य नहीं है, यह कॉल का परिणाम है।

आप उपयोग कर सकते हैं:

lambda: printit(sometext) 

जो एक प्रतिदेय बाद में कहा जा जो शायद तुम क्या चाहते हो जाएगा।

+0

मीठा यह काम करता है! क्या आपको लगता है कि आप जल्दी से समझा सकते हैं कि यह क्यों काम करता है/यह त्रुटि को कैसे हल करता है? धन्यवाद! –

+0

यह समझाया गया है। आपको एक फ़ंक्शन पास करने की आवश्यकता है, यानी कुछ जिसे कहा जा सकता है। def foo(): पास "foo" फ़ंक्शन "foo()" फ़ंक्शन को कॉल करने का वापसी मान है। –

+0

@ अभी भी। सीखना पाइथन "लैम्ब्डा" नामक एक निर्माण का उपयोग करते हुए रन टाइम पर अनाम कार्यों (यानी किसी नाम से बंधे नहीं हैं) के निर्माण का समर्थन करता है। यह एक सामान्य कार्य है -> def f (h): वापसी एच ** 10, और यह एक लैम्ब्डा functin है -> जी = लैम्ब्डा एच: एच ** 10, अंतर ; –

10

चूंकि यह पहला परिणाम मैं जब ये समस्या हो रही पाया है, मैं एक अद्यतन जवाब जोड़ रहा:

वर्तमान apscheduler के लिए docs (v3.3.0) के अनुसार आप समारोह तर्क के साथ पारित कर सकते हैं add_job() फ़ंक्शन में।

तो ओपी के मामले में यह होगा:

sched.add_job(printit, "cron", [sometext], second="*/5") 
+0

यदि आप करते हैं तर्क के नाम पर आपको तर्क के साथ नौकरी कार्य तर्कों से पहले होना चाहिए था। उदाहरण: args = [arg1, arg2] – Milso

संबंधित मुद्दे