<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Requisições assíncronas em Python on (dev) Lucas Polo</title><link>https://blog.lucaspolo.dev/series/requisi%C3%A7%C3%B5es-ass%C3%ADncronas-em-python/</link><description>Recent content in Requisições assíncronas em Python on (dev) Lucas Polo</description><image><title>(dev) Lucas Polo</title><url>https://blog.lucaspolo.dev/images/og-default.png</url><link>https://blog.lucaspolo.dev/images/og-default.png</link></image><generator>Hugo -- 0.157.0</generator><language>pt-br</language><lastBuildDate>Mon, 26 Jul 2021 16:37:50 +0000</lastBuildDate><atom:link href="https://blog.lucaspolo.dev/series/requisi%C3%A7%C3%B5es-ass%C3%ADncronas-em-python/index.xml" rel="self" type="application/rss+xml"/><item><title>Melhorando as requisições assíncronas com Python - Parte 3</title><link>https://blog.lucaspolo.dev/posts/melhorando-as-requisicoes-assincronas-com-python-parte-3/</link><pubDate>Mon, 26 Jul 2021 13:45:00 +0000</pubDate><guid>https://blog.lucaspolo.dev/posts/melhorando-as-requisicoes-assincronas-com-python-parte-3/</guid><description>&lt;p&gt;Este post é uma continuidade dos posts &lt;a href="https://blog.lucaspolo.dev/posts/lendo-arquivos-csv-em-python-e-fazendo-requisicoes-parte-1/"&gt;Lendo arquivos CSV em Python e fazendo requisições&lt;/a&gt; e do post &lt;a href="https://blog.lucaspolo.dev/posts/fazendo-requests-concorrentemente-assincronas-no-python-parte-2/"&gt;Fazendo requests concorrentemente (assíncronas) no Python&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Após fazermos as requests assíncronas no último post obtivemos uma melhoria signifcativa em nosso processamento, conseguindo paralelizar as requests e reduzindo muito o tempo. Porém não estamos fazendo o melhor proveito da API async do Python, percebam que cada função async também é responsável por também imprimir o resultado e o ideal seria retornarmos os resultados para tratar posteriormente. Vamos fazer isso:&lt;/p&gt;</description></item><item><title>Fazendo requests concorrentemente (assíncronas) no Python - Parte 2</title><link>https://blog.lucaspolo.dev/posts/fazendo-requests-concorrentemente-assincronas-no-python-parte-2/</link><pubDate>Mon, 12 Jul 2021 14:30:00 +0000</pubDate><guid>https://blog.lucaspolo.dev/posts/fazendo-requests-concorrentemente-assincronas-no-python-parte-2/</guid><description>&lt;p&gt;Este post é uma continuação direta do post &lt;a href="https://blog.lucaspolo.dev/posts/lendo-arquivos-csv-em-python-e-fazendo-requisicoes-parte-1/"&gt;Lendo arquivos CSV em Python e fazendo requisições - Parte 1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Depois de conseguirmos ler o CSV e conseguirmos fazer requisições em lote, podemos agora iniciar uma primeira otimização, realizar as cotações em paralelo. Para isto usaremos a API assíncrona do Python em conjunto com uma nova biblioteca de requests, a &lt;a href="https://www.python-httpx.org/"&gt;HTTPX&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A primeira coisa que faremos é alterar a biblioteca Python que utilizamos, adaptar a requisição e nosso programa para começar a trabalhar assíncronamente. As alterações são principalmente na definição das funções e também nas mudanças para as chamadas das funções assíncronas que agora precisam do &lt;em&gt;await&lt;/em&gt; antes:&lt;/p&gt;</description></item><item><title>Lendo arquivos CSV em Python e fazendo requisições - Parte 1</title><link>https://blog.lucaspolo.dev/posts/lendo-arquivos-csv-em-python-e-fazendo-requisicoes-parte-1/</link><pubDate>Mon, 28 Jun 2021 14:30:00 +0000</pubDate><guid>https://blog.lucaspolo.dev/posts/lendo-arquivos-csv-em-python-e-fazendo-requisicoes-parte-1/</guid><description>&lt;p&gt;Algumas vezes surge a necessidade de fazermos algum processamento em uma base de dados, como requisições e afins. É muito comum neste momento recebermos um CSV ou até mesmo uma planilha do Excel, ai neste momento devemos escrever um script que processe essa informação. Suponhamos que precisamos atualizar o nome de algum cliente dado seus &lt;em&gt;id&amp;rsquo;s&lt;/em&gt; e nomes, seguindo um arquivo neste modelo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-csv" data-lang="csv"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f1fa8c"&gt;id&lt;/span&gt;,&lt;span style="color:#f1fa8c"&gt;nome&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f1fa8c"&gt;1&lt;/span&gt;,&lt;span style="color:#f1fa8c"&gt;Cebolinha&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f1fa8c"&gt;2&lt;/span&gt;,&lt;span style="color:#f1fa8c"&gt;Monica&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f1fa8c"&gt;3&lt;/span&gt;,&lt;span style="color:#f1fa8c"&gt;Magali&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f1fa8c"&gt;4&lt;/span&gt;,&lt;span style="color:#f1fa8c"&gt;Cascão&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f1fa8c"&gt;5&lt;/span&gt;,&lt;span style="color:#f1fa8c"&gt;Penadinho&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f1fa8c"&gt;6&lt;/span&gt;,&lt;span style="color:#f1fa8c"&gt;Alminha&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f1fa8c"&gt;7&lt;/span&gt;,&lt;span style="color:#f1fa8c"&gt;Horácio&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A abordagem mais simples que eu sigo é iniciar criando uma função primária, que no geral chamo de &lt;em&gt;main&lt;/em&gt; e iterar no arquivo CSV usando um &lt;a href="https://gist.github.com/lucaspolo/12cba1fad758ec0c541527a0aa4a5fbd"&gt;DictReader&lt;/a&gt;:&lt;/p&gt;</description></item></channel></rss>