{"id":24791,"date":"2026-09-16T17:51:37","date_gmt":"2026-09-16T17:51:37","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/teste-de-carga-http-com-twisted-python-e-treq\/"},"modified":"2026-09-16T17:51:37","modified_gmt":"2026-09-16T17:51:37","slug":"teste-de-carga-http-com-twisted-python-e-treq","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/teste-de-carga-http-com-twisted-python-e-treq\/","title":{"rendered":"Teste de carga HTTP com Twisted Python e Treq"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Estar no mercado de APIs tem seus desafios, e manter a robustez do sistema nos hor\u00e1rios de pico \u00e9 um deles. \u00c9 por isso que fazemos muitos testes de carga aqui na Mailgun.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tentamos diversas abordagens ao longo do tempo, de um simples Apache Bench a su\u00edtes de teste personalizadas mais complexas. Mas esta publica\u00e7\u00e3o \u00e9 sobre um teste de carga &#8220;r\u00e1pido e improvisado&#8221;, por\u00e9m muito flex\u00edvel, usando Python.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando se trata de programar clientes HTTP em Python, somos f\u00e3s da\u00a0<a href=\"http:\/\/docs.python-requests.org\/en\/latest\/\" target=\"_tabs\" rel=\"noopener noreferrer\">biblioteca Requests<\/a>. \u00c9 isso que recomendamos aos usu\u00e1rios da nossa API. A Requests \u00e9 \u00f3tima, mas tem um ponto fraco: o bloqueio de uma chamada por thread. <b>\u00c9 dif\u00edcil ou imposs\u00edvel gerar dezenas de milhares de solicita\u00e7\u00f5es\u00a0<\/b><b><i>rapidamente<\/i><\/b><b>\u00a0com ela.<\/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-7421\"><p class=\"h5 m-0\" id=\"toc-title-7421\">\u00cdndice<\/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=\"#apresentando-o-treq-no-twisted\">Apresentando o Treq no 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=\"#o-script-de-teste-simples\">O script de teste simples<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Apresentando o Treq no Twisted<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para resolver esse problema, avaliamos o Treq (<a href=\"https:\/\/github.com\/dreid\/treq\" target=\"_tabs\" rel=\"noopener noreferrer\">reposit\u00f3rio do Github<\/a>). O Treq \u00e9 uma biblioteca de clientes HTTP inspirada na Requests, mas executada no Twisted, e possui as vantagens t\u00edpicas do Twisted: \u00e9 ass\u00edncrona e altamente simult\u00e2nea quando se trata de E\/S de rede.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O Treq n\u00e3o \u00e9 espec\u00edfico para testes de carga: \u00e9 uma \u00f3tima ferramenta para criar clientes HTTP de alta simultaneidade no geral, como os rastreadores da web. O Treq \u00e9 elegante, simples de usar e poderoso. Aqui est\u00e1 um exemplo:<\/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=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\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\">O script de teste simples<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Abaixo, mostramos um script simples que usa o Treq para bombardear um \u00fanico URL com o maior n\u00famero poss\u00edvel de solicita\u00e7\u00f5es.<\/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=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\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\">A sa\u00edda:<\/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=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\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\">As solicita\u00e7\u00f5es marcadas como &#8220;Generated&#8221; s\u00e3o aquelas que j\u00e1 foram preparadas, mas que o reator do Twisted ainda n\u00e3o enviou. Por simplicidade, este script ignora todos os erros. Incluir as estat\u00edsticas de tempo limite fica como um exerc\u00edcio para voc\u00ea.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><b>O script pode ser usado como um ponto de partida, sendo aprimorado e ampliado <\/b>com a sua pr\u00f3pria l\u00f3gica personalizada e espec\u00edfica do aplicativo. Uma sugest\u00e3o de melhoria seria usar \u00a0<a href=\"http:\/\/docs.python.org\/2\/library\/collections.html#counter-objects\" target=\"_tabs\" rel=\"noopener noreferrer\">collections.Counter<\/a>  em vez das deselegantes vari\u00e1veis globais. O script \u00e9 executado em uma \u00fanica thread. Para conseguir o n\u00famero m\u00e1ximo de solicita\u00e7\u00f5es de uma m\u00e1quina, tente usar algo como a\u00a0<a href=\"http:\/\/docs.python.org\/2\/library\/multiprocessing.html\" target=\"_tabs\" rel=\"noopener noreferrer\">multiprocessing<\/a>\u00a0pode ser usado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bons testes de carga!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Abra\u00e7os,<br>\nMailgunners<\/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_3446e22e59315d46e5f2b57aa2f6c788\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                Cadastre-se            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_3446e22e59315d46e5f2b57aa2f6c788\">\r\n                \u00c9 f\u00e1cil come\u00e7ar. E \u00e9 gr\u00e1tis.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">Veja o que voc\u00ea pode alcan\u00e7ar com a melhor plataforma de entrega de e-mail do mundo.<\/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>Estar no mercado de APIs tem seus desafios, e manter a robustez do sistema nos hor\u00e1rios de pico \u00e9 um deles. \u00c9 por isso que fazemos muitos testes de carga aqui na Mailgun.<\/p>\n","protected":false},"author":13,"featured_media":4843,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[23],"class_list":["post-24791","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>Teste de carga HTTP com Twisted Python e Treq - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"O Treq \u00e9 uma biblioteca de clientes HTTP inspirada na Requests, mas executada no Twisted, e possui as vantagens t\u00edpicas do Twisted: \u00e9 ass\u00edncrona e altamente simult\u00e2nea quando se trata de E\/S de rede. Leia mais \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\/pt\/blog\/it-and-engineering\/teste-de-carga-http-com-twisted-python-e-treq\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Teste de carga HTTP com Twisted Python e Treq - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"O Treq \u00e9 uma biblioteca de clientes HTTP inspirada na Requests, mas executada no Twisted, e possui as vantagens t\u00edpicas do Twisted: \u00e9 ass\u00edncrona e altamente simult\u00e2nea quando se trata de E\/S de rede. Leia mais \u2013\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/teste-de-carga-http-com-twisted-python-e-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 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/teste-de-carga-http-com-twisted-python-e-treq\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/teste-de-carga-http-com-twisted-python-e-treq\\\/\",\"name\":\"Teste de carga HTTP com Twisted Python e Treq - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/teste-de-carga-http-com-twisted-python-e-treq\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/teste-de-carga-http-com-twisted-python-e-treq\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"datePublished\":\"2026-09-16T17:51:37+00:00\",\"description\":\"O Treq \u00e9 uma biblioteca de clientes HTTP inspirada na Requests, mas executada no Twisted, e possui as vantagens t\u00edpicas do Twisted: \u00e9 ass\u00edncrona e altamente simult\u00e2nea quando se trata de E\\\/S de rede. Leia mais \u2013\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/teste-de-carga-http-com-twisted-python-e-treq\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/teste-de-carga-http-com-twisted-python-e-treq\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/teste-de-carga-http-com-twisted-python-e-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\\\/pt\\\/blog\\\/it-and-engineering\\\/teste-de-carga-http-com-twisted-python-e-treq\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/inicio\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Teste de carga HTTP com Twisted Python e Treq\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Poderosas APIs de e-mail transacional que permitem a voc\u00ea enviar, receber e rastrear e-mails, criadas com os desenvolvedores em mente. Saiba mais hoje mesmo!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#\\\/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\\\/pt\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Teste de carga HTTP com Twisted Python e Treq - Transactional Email API Service For Developers | Mailgun","description":"O Treq \u00e9 uma biblioteca de clientes HTTP inspirada na Requests, mas executada no Twisted, e possui as vantagens t\u00edpicas do Twisted: \u00e9 ass\u00edncrona e altamente simult\u00e2nea quando se trata de E\/S de rede. Leia mais \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\/pt\/blog\/it-and-engineering\/teste-de-carga-http-com-twisted-python-e-treq\/","og_locale":"pt_BR","og_type":"article","og_title":"Teste de carga HTTP com Twisted Python e Treq - Transactional Email API Service For Developers | Mailgun","og_description":"O Treq \u00e9 uma biblioteca de clientes HTTP inspirada na Requests, mas executada no Twisted, e possui as vantagens t\u00edpicas do Twisted: \u00e9 ass\u00edncrona e altamente simult\u00e2nea quando se trata de E\/S de rede. Leia mais \u2013","og_url":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/teste-de-carga-http-com-twisted-python-e-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 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/teste-de-carga-http-com-twisted-python-e-treq\/","url":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/teste-de-carga-http-com-twisted-python-e-treq\/","name":"Teste de carga HTTP com Twisted Python e Treq - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/teste-de-carga-http-com-twisted-python-e-treq\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/teste-de-carga-http-com-twisted-python-e-treq\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","datePublished":"2026-09-16T17:51:37+00:00","description":"O Treq \u00e9 uma biblioteca de clientes HTTP inspirada na Requests, mas executada no Twisted, e possui as vantagens t\u00edpicas do Twisted: \u00e9 ass\u00edncrona e altamente simult\u00e2nea quando se trata de E\/S de rede. Leia mais \u2013","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/teste-de-carga-http-com-twisted-python-e-treq\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/teste-de-carga-http-com-twisted-python-e-treq\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/teste-de-carga-http-com-twisted-python-e-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\/pt\/blog\/it-and-engineering\/teste-de-carga-http-com-twisted-python-e-treq\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/pt\/inicio\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/pt\/blog\/"},{"@type":"ListItem","position":3,"name":"Teste de carga HTTP com Twisted Python e Treq"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/pt\/#website","url":"https:\/\/www.mailgun.com\/pt\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Poderosas APIs de e-mail transacional que permitem a voc\u00ea enviar, receber e rastrear e-mails, criadas com os desenvolvedores em mente. Saiba mais hoje mesmo!","publisher":{"@id":"https:\/\/www.mailgun.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/pt\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/#\/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\/pt\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/24791","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/users\/13"}],"version-history":[{"count":0,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/24791\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media\/4843"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media?parent=24791"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog_category?post=24791"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}