{"id":861,"date":"2017-10-13T12:53:08","date_gmt":"2017-10-13T10:53:08","guid":{"rendered":"http:\/\/blog.zeit.de\/dev\/?p=861"},"modified":"2017-10-13T12:53:08","modified_gmt":"2017-10-13T10:53:08","slug":"celery-longterm-scheduler-open-source","status":"publish","type":"post","link":"https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/","title":{"rendered":"Longterm Scheduler f\u00fcr Celery ver\u00f6ffentlicht"},"content":{"rendered":"<p>Es kommt in der Entwicklungsabteilung von ZEIT ONLINE leider nicht sehr oft vor, dass wir ein Modul von allgemeinem Nutzen entwickeln. Um so mehr freuen wir uns, wenn wir einmal die Gelegenheit haben, der Open-Source-Community etwas zur\u00fcckzugeben, von der wir selbst so sehr profitieren.<!--more--><\/p>\n<p>Unsere <a href=\"http:\/\/www.celeryproject.org\/\">interne asynchrone Taskverarbeitung<\/a> haben wir in den letzten Wochen komplett \u00fcberarbeitet und auf Celery umgestellt. Ein Task ist bei uns zum Beispiel die Ver\u00f6ffentlichung eines Artikels. Ein Redakteur klickt auf Ver\u00f6ffentlichung, der Task wird \u00fcber einen Broker eingestellt und m\u00f6glichst schnell abgearbeitet. In dieser Zeit kann der Redakteur weiterarbeiten oder auf die Ver\u00f6ffentlichung warten \u2013 besonders lange dauert es nicht.<\/p>\n<p>Ein besonderes Feature der Ver\u00f6ffentlichung in unserem CMS ist die automatische Ver\u00f6ffentlichung zu einem bestimmten Zeitpunkt. Nun bietet Celery sogar einige zeitabh\u00e4ngige Konzepte an. Man kann beispielsweise eine bestimmte Aufgabe mit einem Countdown versehen. Allerdings l\u00e4sst sich ein solcher Task nicht mehr abbrechen. Und die sogenannten Celery-Beats sind eher f\u00fcr periodische Aufgaben gedacht. Unser konkretes Problem k\u00f6nnte man also ganz ohne Celery l\u00f6sen, indem man es in die Anwendung verlagert und sich dort merkt, wann man einen bestimmten Artikel ver\u00f6ffentlichen m\u00f6chte.<\/p>\n<p>Wir hatten da eine etwas andere und \u2013 wie wir hoffen \u2013 allgemeinere Idee. Mit unserem <a href=\"https:\/\/pypi.python.org\/pypi\/celery-longterm-scheduler\">Longterm Scheduler<\/a> ist es m\u00f6glich, die Aufgabe direkt als Celery-Task in ein daf\u00fcr vorgesehenes Backend zu schreiben. Daf\u00fcr muss Celery mit einer erweiterten Task-Klasse konfiguriert werden. Soll eine Aufgabe anschlie\u00dfend zu einem bestimmten Zeitpunkt ausgef\u00fchrt werden, muss man diesen Zeitpunkt bei der Einstellung zus\u00e4tzlich \u00fcbergeben. Mit einem Cronjob wird das Backend anschlie\u00dfend regelm\u00e4\u00dfig \u00fcberpr\u00fcft und ein Task wird als regul\u00e4rer Celery-Task eingereiht und abgearbeitet, wenn das F\u00e4lligkeitsdatum erreicht ist.<\/p>\n<p>Vielleicht findet jemand dies genauso n\u00fctzlich wie wir. Unser Ansatz ist noch etwas konkreter und entwicklerfreundlicher auf unserer <a href=\"https:\/\/github.com\/ZeitOnline\/celery_longterm_scheduler\">Github-Seite<\/a> beschrieben. Das Python-Paket befindet sich auf <a href=\"https:\/\/pypi.python.org\/pypi\/celery-longterm-scheduler\">Python Package Index<\/a>. Bisher unterst\u00fctzen wir Redis, da wir dieses Backend auch als Broker benutzen. \u00dcber Pull-Request zur Unterst\u00fctzung anderer Backends w\u00fcrden wir uns freuen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es kommt in der Entwicklungsabteilung von ZEIT ONLINE leider nicht sehr oft vor, dass wir ein Modul von allgemeinem Nutzen entwickeln. Um so mehr freuen wir uns, wenn wir einmal die Gelegenheit haben, der Open-Source-Community etwas zur\u00fcckzugeben, von der wir selbst so sehr profitieren.<\/p>\n","protected":false},"author":406,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[16],"tags":[],"class_list":["post-861","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Longterm Scheduler f\u00fcr Celery ver\u00f6ffentlicht<\/title>\n<meta name=\"description\" content=\"Mit unserem Longterm Scheduler f\u00fcr Celery k\u00f6nnen wir der Open-Source-Community etwas zur\u00fcckzugeben, von der wir selbst so sehr profitieren.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Longterm Scheduler f\u00fcr Celery ver\u00f6ffentlicht\" \/>\n<meta property=\"og:description\" content=\"Mit unserem Longterm Scheduler f\u00fcr Celery k\u00f6nnen wir der Open-Source-Community etwas zur\u00fcckzugeben, von der wir selbst so sehr profitieren.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/\" \/>\n<meta property=\"og:site_name\" content=\"Dev-Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-10-13T10:53:08+00:00\" \/>\n<meta name=\"author\" content=\"Ron Drongowski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschrieben von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ron Drongowski\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"2\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/\",\"url\":\"https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/\",\"name\":\"Longterm Scheduler f\u00fcr Celery ver\u00f6ffentlicht\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zeit.de\/dev\/#website\"},\"datePublished\":\"2017-10-13T10:53:08+00:00\",\"dateModified\":\"2017-10-13T10:53:08+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zeit.de\/dev\/#\/schema\/person\/33be436e0d199d6963e3a00739fee311\"},\"description\":\"Mit unserem Longterm Scheduler f\u00fcr Celery k\u00f6nnen wir der Open-Source-Community etwas zur\u00fcckzugeben, von der wir selbst so sehr profitieren.\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zeit.de\/dev\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Longterm Scheduler f\u00fcr Celery ver\u00f6ffentlicht\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zeit.de\/dev\/#website\",\"url\":\"https:\/\/blog.zeit.de\/dev\/\",\"name\":\"Dev-Blog\",\"description\":\"Entwicklungsblog von ZEIT ONLINE\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zeit.de\/dev\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zeit.de\/dev\/#\/schema\/person\/33be436e0d199d6963e3a00739fee311\",\"name\":\"Ron Drongowski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/blog.zeit.de\/dev\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/87bafd3e8324e40f86c03cddaa598f763679bc668362271216294f4ca35a7b7d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/87bafd3e8324e40f86c03cddaa598f763679bc668362271216294f4ca35a7b7d?s=96&d=mm&r=g\",\"caption\":\"Ron Drongowski\"},\"url\":\"https:\/\/blog.zeit.de\/dev\/author\/rondrongowski\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Longterm Scheduler f\u00fcr Celery ver\u00f6ffentlicht","description":"Mit unserem Longterm Scheduler f\u00fcr Celery k\u00f6nnen wir der Open-Source-Community etwas zur\u00fcckzugeben, von der wir selbst so sehr profitieren.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/","og_locale":"de_DE","og_type":"article","og_title":"Longterm Scheduler f\u00fcr Celery ver\u00f6ffentlicht","og_description":"Mit unserem Longterm Scheduler f\u00fcr Celery k\u00f6nnen wir der Open-Source-Community etwas zur\u00fcckzugeben, von der wir selbst so sehr profitieren.","og_url":"https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/","og_site_name":"Dev-Blog","article_published_time":"2017-10-13T10:53:08+00:00","author":"Ron Drongowski","twitter_card":"summary_large_image","twitter_misc":{"Geschrieben von":"Ron Drongowski","Gesch\u00e4tzte Lesezeit":"2\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/","url":"https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/","name":"Longterm Scheduler f\u00fcr Celery ver\u00f6ffentlicht","isPartOf":{"@id":"https:\/\/blog.zeit.de\/dev\/#website"},"datePublished":"2017-10-13T10:53:08+00:00","dateModified":"2017-10-13T10:53:08+00:00","author":{"@id":"https:\/\/blog.zeit.de\/dev\/#\/schema\/person\/33be436e0d199d6963e3a00739fee311"},"description":"Mit unserem Longterm Scheduler f\u00fcr Celery k\u00f6nnen wir der Open-Source-Community etwas zur\u00fcckzugeben, von der wir selbst so sehr profitieren.","breadcrumb":{"@id":"https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zeit.de\/dev\/celery-longterm-scheduler-open-source\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zeit.de\/dev\/"},{"@type":"ListItem","position":2,"name":"Longterm Scheduler f\u00fcr Celery ver\u00f6ffentlicht"}]},{"@type":"WebSite","@id":"https:\/\/blog.zeit.de\/dev\/#website","url":"https:\/\/blog.zeit.de\/dev\/","name":"Dev-Blog","description":"Entwicklungsblog von ZEIT ONLINE","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zeit.de\/dev\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/blog.zeit.de\/dev\/#\/schema\/person\/33be436e0d199d6963e3a00739fee311","name":"Ron Drongowski","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/blog.zeit.de\/dev\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/87bafd3e8324e40f86c03cddaa598f763679bc668362271216294f4ca35a7b7d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/87bafd3e8324e40f86c03cddaa598f763679bc668362271216294f4ca35a7b7d?s=96&d=mm&r=g","caption":"Ron Drongowski"},"url":"https:\/\/blog.zeit.de\/dev\/author\/rondrongowski\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.zeit.de\/dev\/wp-json\/wp\/v2\/posts\/861","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zeit.de\/dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zeit.de\/dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zeit.de\/dev\/wp-json\/wp\/v2\/users\/406"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zeit.de\/dev\/wp-json\/wp\/v2\/comments?post=861"}],"version-history":[{"count":11,"href":"https:\/\/blog.zeit.de\/dev\/wp-json\/wp\/v2\/posts\/861\/revisions"}],"predecessor-version":[{"id":873,"href":"https:\/\/blog.zeit.de\/dev\/wp-json\/wp\/v2\/posts\/861\/revisions\/873"}],"wp:attachment":[{"href":"https:\/\/blog.zeit.de\/dev\/wp-json\/wp\/v2\/media?parent=861"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zeit.de\/dev\/wp-json\/wp\/v2\/categories?post=861"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zeit.de\/dev\/wp-json\/wp\/v2\/tags?post=861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}