2017-02-20 10 views
10

हम विंडोज़ पर आईआईएस के तहत एक फ्लास्क साइट चलाते हैं, और प्रक्रिया के बाहर के कार्यों के लिए हम सेलेरी का उपयोग करते हैं। सेलेरी ने हमें विंडोज़ के तहत कुछ समस्याएं दी हैं, लेकिन अब हम रेबिटएमक्यू/एएमक्यूपी का उपयोग बैक एंड के रूप में करते हुए चल रहे संस्करण 3.1.12 से संतुष्ट हैं, जो विंडोज के तहत काम करता है।विंडोज़ पर एक (पायथन 3) कार्य कतार के लिए सबसे अच्छा विकल्प क्या है कि अब सेलेरी 4 ने विंडोज़ समर्थन को छोड़ दिया है?

सेलेरी (4) का नया संस्करण dropped support for Windows है, इसलिए मैं एक व्यवहार्य विकल्प ढूंढ रहा हूं।

RQ एक बहुत अच्छा काम कतार लगती है, लेकिन यह भी विंडोज का समर्थन नहीं करता (bottom of the page)

मैंने देखा है कुछ और, उचित रूप में कम लोकप्रिय कार्य कतारों की तरह:

लेकिन यह स्पष्ट नहीं है कि ये विंडोज और फ्लास्क का समर्थन करते हैं। मुझे आश्चर्य है कि किसी के पास विंडोज के तहत एक पायथन कार्य कतार चलाने का अनुभव है जो काम करता है। शायद मैंने उल्लेख किया है, या एक विकल्प।

यह हमारे लिए एक लिनक्स मशीन चलाने का विकल्प नहीं है, क्योंकि हमारे पास लिनक्स का प्रबंधन करने का कोई अनुभव नहीं है, और हमारे पास बहुत सी विरासत सामग्री चल रही है जिसके लिए विंडोज की आवश्यकता है।

+0

क्या आपको कभी कोई मिला? मैं पिछले 2 हफ्तों में से एक की तलाश में हूं और अभी भी विकसित नहीं हो पाया है। –

+0

@ केविनवस्को; ह्यूई सबसे व्यापक रूप से ऐसा लगता है। मैं इसके साथ प्रयोग कर रहा हूं, और यह आसान है और यह काम करता है। हालांकि, मुझे एक बड़ा मुद्दा मिला है, और लेखक इसके साथ मेरी मदद नहीं कर सका; मैं ह्यूई श्रमिकों का उपयोग करने में असमर्थ हूं जिन्हें फ्लास्क संदर्भ की आवश्यकता है। मैं इस संदर्भ को कार्यों को पारित करने का तरीका नहीं समझ सकता। यह मुझे वर्तमान में ह्यूई का उपयोग बंद कर देता है। –

+0

प्रतिक्रिया के लिए धन्यवाद, मैं ह्यूई की जांच करूंगा, मुझे फ्लास्क के साथ काम नहीं करना है, इसलिए उम्मीद है कि यह कोई समस्या नहीं होगी।मुझे "वर्क्यू" नामक एक भी मिला, लेकिन इसे 3 साल या उससे भी ज्यादा समय में अपडेट नहीं किया गया है और यह स्पष्ट नहीं है कि यह विंडोज का समर्थन करता है या नहीं। –

उत्तर

6

मैं बिना किसी मुद्दे के विंडोज़ पर ह्यूई के साथ फ्लास्क चलाता हूं, स्वीकार्य रूप से केवल विकास और परीक्षण के लिए। उत्पादन के लिए मैं लिनक्स सर्वर पर फ्लास्क/ह्यूई का उपयोग करता हूं। रेडिस बैक एंड, फ्लास्क 0.12 और ह्यूई 1.2.0 दोनों के साथ।

मैं ह्यूई कार्यों द्वारा विशिष्ट उपयोग के लिए फ्लास्क ऐप का एक विशेष "कट डाउन" संस्करण बनाने के लिए कारखाने पैटर्न का उपयोग करता हूं। यह संस्करण ब्लूप्रिंट लोड नहीं करता है या फ्लास्क-एडमिन को कॉन्फ़िगर नहीं करता है क्योंकि इन्हें ह्यूई कार्यों में आवश्यक नहीं है।

ऐप फ़ोल्डर में __init__.py का उदाहरण कोड।

def create_app(settings_override=None): 

    app = App('app') 

    if settings_override: 
     app.config.from_object(settings_override) 
    else: 
     app.config.from_object(os.environ['APP_SETTINGS']) 

    from .ext import configure_extensions 
    configure_extensions(app, admin, load_modules=True) 

    # REST 
    import rest.api_v1 
    app.register_blueprint(api_v1_bp, url_prefix='/api/v1') 

    # ... and more suff 


def create_huey_app(): 
    app = App('huey app') 

    app.config.from_object(os.environ['APP_SETTINGS']) 

    from .ext import configure_extensions 
    configure_extensions(app, admin=None, load_modules=False) 

    return app 

configure_extensions के विचार Quokka CMS से लिया जाता है: App एक वर्ग Flask से विस्तार है। यह लागू करने के तरीके को देखने के लिए app__init__.py और इसके extensions module की जांच करें। ध्यान दें कि यह प्रोजेक्ट सेलेरी कार्य कतार के उपयोग के लिए एक विशिष्ट ऐप (create_celery_app) भी बनाता है।

tasks.py का उदाहरण। फ्लास्क संदर्भ बनाने के लिए with app.app_context(): के उपयोग पर ध्यान दें। अब मेरे कार्यों में फ्लास्क-मेल, फ्लास्क-एसक्लएल्चेमी (डीबी, मॉडल) आदि जैसे एक्सटेंशन तक पहुंच है।

@huey.task() 
def generate_transaction_documents_and_email(transaction_id): 
    app = create_huey_app() 
    with app.app_context(): 
     reports.generate_transaction_documents_and_email(transaction_id) 


@huey.task() 
def send_email(subject, recipients, text_body, html_body, attachments=[], cc=[]): 
    app = create_huey_app() 
    with app.app_context(): 
     emails.send_email(subject, recipients, text_body, html_body, attachments, cc) 


@huey.periodic_task(crontab(minute='30')) 
def synchronize_mailing_list(): 
    app = create_huey_app() 
    if app.config['CREATESEND_SYNCHRONIZE']: 
     _list_name = app.config['CREATESEND_LIST'] 
     with app.app_context(): 
      sync_delete_ar_subscribers(_list_name) 
      sync_add_ar_subscribers(_list_name) 
+0

इस जानकारी के लिए धन्यवाद; मैं इसे अपने लिए स्थापित करने की कोशिश करूंगा और बाद में इस प्रश्न पर वापस आऊंगा। –

+0

मैं इसे कार्यान्वित कर रहा हूं, लेकिन मुझे यकीन है कि आप config_extensions आयात के अंदर क्या करते हैं। क्या आप वहां क्या चल रहे हैं साझा करने पर विचार करेंगे? –

+0

@RicoSuave मैंने अपना जवाब अपडेट कर दिया है। – pjcunningham

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