{"id":25046,"date":"2026-09-16T19:09:57","date_gmt":"2026-09-16T19:09:57","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/http-stresstests-mit-twisted-python-und-treq\/"},"modified":"2026-09-16T19:09:57","modified_gmt":"2026-09-16T19:09:57","slug":"http-stresstests-mit-twisted-python-und-treq","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/http-stresstests-mit-twisted-python-und-treq\/","title":{"rendered":"HTTP-Stresstests mit Twisted Python und Treq"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Das API-Gesch\u00e4ft bringt Herausforderungen mit sich. Die Stabilit\u00e4t des Systems zu Spitzenzeiten aufrechtzuerhalten, ist eine davon. Aus diesem Grund f\u00fchren wir hier bei Mailgun viele Stresstests durch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Im Laufe der Zeit haben wir viele verschiedene Ans\u00e4tze ausprobiert, von einfachen Apache-Benchmarks bis hin zu komplexeren, benutzerdefinierten Test-Suites. In diesem Beitrag geht es jedoch um \u201eQuick-and-Dirty-Stresstests\u201c, die dank Python dennoch sehr flexibel sind.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn es darum geht, HTTP-Clients in Python zu schreiben, sind wir Fans der\u00a0<a href=\"http:\/\/docs.python-requests.org\/en\/latest\/\" target=\"_tabs\" rel=\"noopener noreferrer\">Requests-Bibliothek<\/a>. Das empfehlen wir auch allen, die unsere API nutzen. Requests ist gro\u00dfartig, hat aber eine Schw\u00e4che: Es handelt sich um eine blockierende Angelegenheit mit einem Aufruf pro Thread. <b>Es ist schwer oder gar unm\u00f6glich, damit\u00a0<\/b><b><i>schnell<\/i><\/b><b>\u00a0Zehntausende von Anfragen zu generieren.<\/b><\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-8429\"><p class=\"h5 m-0\" id=\"toc-title-8429\">Inhaltsverzeichnis<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#wir-stellen-vor-treq-auf-twisted\">Wir stellen vor: Treq auf Twisted<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#das-einfache-testskript\">Das einfache Testskript<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Wir stellen vor: Treq auf Twisted<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um dieses Problem zu l\u00f6sen, haben wir uns Treq angesehen (<a href=\"https:\/\/github.com\/dreid\/treq\" target=\"_tabs\" rel=\"noopener noreferrer\">Github-Repository<\/a>). Treq ist eine HTTP-Client-Bibliothek, die von Requests inspiriert wurde. Sie l\u00e4uft jedoch auf Twisted und besitzt dessen typische St\u00e4rken: Sie arbeitet asynchron und bei Netzwerk-E\/A hochgradig parallel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Treq ist keineswegs nur auf Stresstests beschr\u00e4nkt. Es ist ein hervorragendes Tool, um allgemein hochparallele HTTP-Clients wie Webcrawler zu schreiben. Treq ist elegant, einfach zu bedienen und leistungsstark. Hier ist ein Beispiel:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                     &gt;&gt;&gt; from treq import get\r\n    &gt;&gt;&gt; def done(response):\r\n    ... print response.code\r\n    ... reactor.stop()\r\n    &gt;&gt;&gt; get(&quot;http:\/\/www.github.com&quot;).addCallback(done)\r\n    &gt;&gt;&gt; from twisted.internet import reactor\r\n    &gt;&gt;&gt; reactor.run() 200\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Das einfache Testskript<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nachfolgend finden Sie ein einfaches Skript, das Treq verwendet, um eine einzelne URL mit der maximal m\u00f6glichen Anzahl an Anfragen zu bombardieren.<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                     #!\/usr\/bin\/env python  \r\n    from twisted.internet import epollreactor  \r\n    epollreactor.install()\r\n    from twisted.internet import reactor, task  \r\n    from twisted.web.client import HTTPConnectionPool  \r\n    import treq  \r\n    import random  \r\n    from datetime import datetime\r\n    req_generated = 0  \r\n    req_made = 0  \r\n    req_done = 0\r\n    cooperator = task.Cooperator()\r\n    pool = HTTPConnectionPool(reactor)\r\n    def counter():  \r\n    &#039;&#039;&#039;This function gets called once a second and prints the progress at one \r\n    second intervals. \r\n    &#039;&#039;&#039;\r\n    print(&quot;Requests: {} generated; {} made; {} done&quot;.format(\r\n    req_generated, req_made, req_done))\r\n    # reset the counters and reschedule ourselves\r\n    req_generated = req_made = req_done = 0\r\n    reactor.callLater(1, counter)\r\n    def body_received(body):  \r\n    global req_done\r\n    req_done += 1\r\n    def request_done(response):  \r\n    global req_made\r\n    deferred = treq.json_content(response)\r\n    req_made += 1\r\n    deferred.addCallback(body_received)\r\n    deferred.addErrback(lambda x: None)  # ignore errors\r\n    return deferred\r\n    def request():  \r\n    deferred = treq.post(&#039;http:\/\/api.host\/v2\/loadtest\/messages&#039;,\r\n         auth=(&#039;api&#039;, &#039;api-key&#039;),\r\n         data={&#039;from&#039;: &#039;Loadtest &#039;,\r\n               &#039;to&#039;: &#039;to@example.org&#039;,\r\n               &#039;subject&#039;: &quot;test&quot;},\r\n         pool=pool)\r\n    deferred.addCallback(request_done)\r\n    return deferred\r\n    def requests_generator():  \r\n    global req_generated\r\n    while True:\r\n    deferred = request()\r\n    req_generated += 1\r\n    # do not yield deferred here so cooperator won&#039;t pause until\r\n    # response is received\r\n    yield None\r\n    if __name__ == &#039;__main__&#039;:  \r\n    # make cooperator work on spawning requests\r\n    cooperator.cooperate(requests_generator())\r\n    # run the counter that will be reporting sending speed once a second\r\n    reactor.callLater(1, counter)\r\n    # run the reactor\r\n    reactor.run()\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Die Ausgabe:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-Python\">\r\n                                <code id=\"code_0_content\" class=\"language-Python\">\r\n\r\n                                    2013-04-25 09:30 Requests: 327 generated; 153 sent; 153 received \r\n2013-04-25 09:30 Requests: 306 generated; 156 sent; 156 received \r\n2013-04-25 09:30 Requests: 318 generated; 184 sent; 154 received\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Die \u201eGenerated\u201c-Anfragen sind diejenigen, die zwar vorbereitet, aber vom Twisted-Reactor noch nicht gesendet wurden. Der Einfachheit halber ignoriert dieses Skript alle Fehler. Das Hinzuf\u00fcgen der Statistiken f\u00fcr Timeouts \u00fcberlassen wir als \u00dcbung der Leserschaft.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>Das Skript kann als Ausgangspunkt dienen und verbessert sowie erweitert werden, <\/b>und zwar mit Ihrer eigenen anwendungsspezifischen Logik. Eine empfohlene Verbesserung w\u00e4re die Verwendung von\u00a0<a href=\"http:\/\/docs.python.org\/2\/library\/collections.html#counter-objects\" target=\"_tabs\" rel=\"noopener noreferrer\">collections.Counter<\/a> anstelle der unsch\u00f6nen globalen Variablen. Das Skript l\u00e4uft in einem einzigen Thread. Um die maximale Anzahl an Anfragen aus einer Maschine herauszuholen, ist so etwas wie\u00a0<a href=\"http:\/\/docs.python.org\/2\/library\/multiprocessing.html\" target=\"_tabs\" rel=\"noopener noreferrer\">multiprocessing<\/a>\u00a0verwendet werden kann.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Viel Spa\u00df bei den Stresstests!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Viele Gr\u00fc\u00dfe<br>\nIhr Mailgun-Team<\/p>\n\n\n\r\n    <aside data-content-type=\"longform\"  class=\"banner-block longform-spacings rounded-lg shadow-lg px-5 py-6 px-md-6 py-md-7 p-lg-7 bg-light\" data-theme=\"dark\" aria-labelledby=\"banner-block-block_3093138eef328cb5b2f514a3c166487a\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                Registrieren            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_3093138eef328cb5b2f514a3c166487a\">\r\n                Loslegen ist ganz einfach. Und es ist kostenlos.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">Erfahren Sie, was Sie mit der weltbesten Plattform f\u00fcr E-Mail-Zustellung alles erreichen k\u00f6nnen.<\/div>\r\n                            <\/div>\r\n        \r\n        <div class=\"text-start mt-5\"><a href=\"https:\/\/signup.mailgun.com\/new\/signup\"  class=\"btn btn-secondary\" >Get started<\/a><\/div>\r\n    <\/aside>\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>Das API-Gesch\u00e4ft bringt Herausforderungen mit sich. Die Stabilit\u00e4t des Systems zu Spitzenzeiten aufrechtzuerhalten, ist eine davon. Aus diesem Grund f\u00fchren wir hier bei Mailgun viele Stresstests durch.<\/p>\n","protected":false},"author":13,"featured_media":4843,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[23],"class_list":["post-25046","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-it-and-engineering"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>HTTP-Stresstests mit Twisted Python und Treq - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Treq ist eine HTTP-Client-Bibliothek, die von Requests inspiriert wurde. Sie l\u00e4uft jedoch auf Twisted und besitzt dessen typische St\u00e4rken: Sie arbeitet asynchron und bei Netzwerk-E\/A hochgradig parallel. Weiterlesen \u2013\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/http-stresstests-mit-twisted-python-und-treq\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"HTTP-Stresstests mit Twisted Python und Treq - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Treq ist eine HTTP-Client-Bibliothek, die von Requests inspiriert wurde. Sie l\u00e4uft jedoch auf Twisted und besitzt dessen typische St\u00e4rken: Sie arbeitet asynchron und bei Netzwerk-E\/A hochgradig parallel. Weiterlesen \u2013\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/http-stresstests-mit-twisted-python-und-treq\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/http-stresstests-mit-twisted-python-und-treq\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/http-stresstests-mit-twisted-python-und-treq\\\/\",\"name\":\"HTTP-Stresstests mit Twisted Python und Treq - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/http-stresstests-mit-twisted-python-und-treq\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/http-stresstests-mit-twisted-python-und-treq\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"datePublished\":\"2026-09-16T19:09:57+00:00\",\"description\":\"Treq ist eine HTTP-Client-Bibliothek, die von Requests inspiriert wurde. Sie l\u00e4uft jedoch auf Twisted und besitzt dessen typische St\u00e4rken: Sie arbeitet asynchron und bei Netzwerk-E\\\/A hochgradig parallel. Weiterlesen \u2013\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/http-stresstests-mit-twisted-python-und-treq\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/http-stresstests-mit-twisted-python-und-treq\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/http-stresstests-mit-twisted-python-und-treq\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/it-and-engineering\\\/http-stresstests-mit-twisted-python-und-treq\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"HTTP-Stresstests mit Twisted Python und Treq\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Leistungsstarke Transaktions-E-Mail-APIs, mit denen Sie E-Mails senden, empfangen und nachverfolgen k\u00f6nnen, speziell f\u00fcr Entwickler konzipiert. Erfahren Sie noch heute mehr!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"HTTP-Stresstests mit Twisted Python und Treq - Transactional Email API Service For Developers | Mailgun","description":"Treq ist eine HTTP-Client-Bibliothek, die von Requests inspiriert wurde. Sie l\u00e4uft jedoch auf Twisted und besitzt dessen typische St\u00e4rken: Sie arbeitet asynchron und bei Netzwerk-E\/A hochgradig parallel. Weiterlesen \u2013","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:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/http-stresstests-mit-twisted-python-und-treq\/","og_locale":"de_DE","og_type":"article","og_title":"HTTP-Stresstests mit Twisted Python und Treq - Transactional Email API Service For Developers | Mailgun","og_description":"Treq ist eine HTTP-Client-Bibliothek, die von Requests inspiriert wurde. Sie l\u00e4uft jedoch auf Twisted und besitzt dessen typische St\u00e4rken: Sie arbeitet asynchron und bei Netzwerk-E\/A hochgradig parallel. Weiterlesen \u2013","og_url":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/http-stresstests-mit-twisted-python-und-treq\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/http-stresstests-mit-twisted-python-und-treq\/","url":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/http-stresstests-mit-twisted-python-und-treq\/","name":"HTTP-Stresstests mit Twisted Python und Treq - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/http-stresstests-mit-twisted-python-und-treq\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/http-stresstests-mit-twisted-python-und-treq\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","datePublished":"2026-09-16T19:09:57+00:00","description":"Treq ist eine HTTP-Client-Bibliothek, die von Requests inspiriert wurde. Sie l\u00e4uft jedoch auf Twisted und besitzt dessen typische St\u00e4rken: Sie arbeitet asynchron und bei Netzwerk-E\/A hochgradig parallel. Weiterlesen \u2013","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/http-stresstests-mit-twisted-python-und-treq\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/http-stresstests-mit-twisted-python-und-treq\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/http-stresstests-mit-twisted-python-und-treq\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/de\/blog\/it-and-engineering\/http-stresstests-mit-twisted-python-und-treq\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/de\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/de\/blog\/"},{"@type":"ListItem","position":3,"name":"HTTP-Stresstests mit Twisted Python und Treq"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/de\/#website","url":"https:\/\/www.mailgun.com\/de\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Leistungsstarke Transaktions-E-Mail-APIs, mit denen Sie E-Mails senden, empfangen und nachverfolgen k\u00f6nnen, speziell f\u00fcr Entwickler konzipiert. Erfahren Sie noch heute mehr!","publisher":{"@id":"https:\/\/www.mailgun.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/de\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.mailgun.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/de\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/25046","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/users\/13"}],"version-history":[{"count":0,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog\/25046\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/media\/4843"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/media?parent=25046"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/de\/wp-json\/wp\/v2\/blog_category?post=25046"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}