Uruchomię Flask z Huey na Windowsie bez żadnych problemów, wprawdzie tylko do programowania i testowania. Do produkcji używam Flask/Huey na serwerach Linux. Zarówno z back-endem Redis, Flask 0.12 i Huey 1.2.0.
Używam wzoru fabrycznego, aby utworzyć wyspecjalizowaną "wyciętą" wersję aplikacji Flask do określonego użytku przez zadania Huey. Ta wersja nie ładuje schematów lub nie konfiguruje Flask-Admin, ponieważ nie są one wymagane w zadaniach Huey.
Przykładowy kod __init__.py
w folderze aplikacji. App
jest klasą rozciągający się od Flask
:
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
Pomysł configure_extensions
pochodzi z Quokka CMS. Sprawdź jego app
__init__.py
i jego extensions module, aby zobaczyć, w jaki sposób jest to realizowane. Zwróć także uwagę, w jaki sposób ten projekt tworzy również konkretną aplikację (create_celery_app
) do użytku z kolejką zadań Seler.
Przykład . Zwróć uwagę na użycie with app.app_context():
, aby utworzyć kontekst Flask. Teraz moje funkcje mają dostęp do rozszerzeń, takich jak Flask-Mail, Flask-SqlAlchemy (db, modele) itp.
@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)
Czy kiedykolwiek znalazłeś? Szukałem go przez ostatnie 2 tygodnie i nie mogę znaleźć takiego, które jest jeszcze rozwinięte. –
@KevinVasko; Huey jest najczęściej używanym narzędziem. Eksperymentowałem z nią i jest to proste i działa. Jednak znalazłem jeden duży problem, a autor nie mógł mi w tym pomóc; Nie mogę używać pracowników Huey, którzy potrzebują kontekstu Flask. Nie mogę wymyślić, jak przekazać zadania w tym kontekście. To powstrzymuje mnie obecnie przy użyciu Huey. –
Dzięki za opinie, sprawdzę Huey, nie będę musiał pracować z Flask, więc mam nadzieję, że to nie będzie problem.Znalazłem również jeden o nazwie "WorQ", ale nie był aktualizowany od 3 lat i nie jest jasne, czy obsługuje system Windows, czy nie. –