Python - Extensões C

Índice

A linguagem de programação C Está à disposição dos criadores de software há muitos anos, sendo uma linguagem compilada podemos tornar os programas muito mais otimizados e rápidos, graças a isso esta linguagem ainda está em vigor, pois permite que diferentes tipos de processamento sejam realizados com rapidez.

Em Pitão O poder de se desenvolver de forma legível e amigável vem com um preço pequeno, que é que o desempenho pode ser perdido em alguns processos muito específicos, então se essa perda não for aceitável e colocar nosso programa em risco, devemos buscar alternativas. Sua flexibilidade nos permite incorporar módulos feitos em outras linguagens como C.

Escrever extensões em C
escrever Extensões C não é tão transparente quanto fazê-lo em C # ou em JAVA que com as diferentes implementações do Python tornamos isso muito rápido e fácil, com C devemos aderir a um API muito rigoroso, porém essas dificuldades têm levado a ferramentas que tentam melhorar esse processo, uma delas é GOLE.

GOLE é um acrônimo para Wrapper simples e gerador de interface é uma ferramenta que nos permite desenvolver extensões em C ou C ++ e, em seguida, empacotá-las para uso em linguagens de alto nível, como Pitão, Perl, Rubi e outros.

O que o SWIG faz?
Usar GOLE Só temos que cumprir algumas etapas simples, vamos ver o que precisamos a seguir:

  • Devemos escrever uma interface para o nosso código C, este tipo de arquivo é muito semelhante ao cabeçalhos; em alguns casos, você pode usar o arquivo de cabeçalho diretamente.
  • Nós corremos GOLE no arquivo de interface, isso faz com que mais código seja gerado em C, ou seja, o wrapper.
  • Nós compilamos o arquivo interface junto com o empacotador com o qual geramos uma biblioteca compartilhada que podemos usar com as linguagens compatíveis com GOLE.

Um pouco de prática
Depois de dominar um pouco a teoria, vamos ver agora um exemplo disso que explicamos, vamos fazer um módulo que detecta se uma corda é palíndromo, ou seja, se ela é lida da mesma forma nas duas direções, este não é que represente um problema para PitãoNo entanto, quando são strings realmente grandes, o problema de desempenho pode ser notado, vamos primeiro ver o código na imagem a seguir e depois ver como implementá-lo usando SWIG:

Aqui temos a implementação em C, para saber se uma string é palíndromo, então construímos a interface que é o seguinte código:

Uma vez que temos os requisitos completos de nível C, por enquanto vamos ver o que devemos fazer em GOLE para ser capaz de usar isto:

Primeiro, devemos executar o seguinte comando:

 $ swig -python palindrome.i
Onde palindrome.i é nossa interface. Isso irá gerar os arquivos Pitão necessário, então devemos compilar tudo, para esta etapa devemos conhecer muito bem os caminhos de nossos elementos para podermos fazer as referências corretas:
 gcc -c palindrome.c gcc -I $ PYTHON_HOME -I $ PYTHON_HOME / Incluir -c palindrome_wrap.c gcc -shared palindrome.o palindrome_wrap.o -o _palindrome.so 
Após essas etapas, podemos usar nossa nova biblioteca em Pitão da seguinte forma:
 >>> import _palindrome >>> dir (_palindrome) ['__doc__', '__file__', '__name__', 'is_palindrome'] >>> _palindrome.is_palindrome ('ipreferpi') 1 >>> _palindrome.is_palindrome ('notlob ') 0 
Com isso terminamos o tutorial, pois vemos que é um pouco complexo implementar extensões em C no entanto, o desempenho alcançado vale a pena.

Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo
wave wave wave wave wave