Download do Python Dummy_threading: O que é e como usá-lo
Se você é um desenvolvedor Python, já deve ter ouvido falar do rosqueamento módulo, que permite criar e gerenciar vários segmentos de execução em seu programa. Os threads são úteis para executar tarefas simultâneas, como executar processos em segundo plano, manipular entradas do usuário ou fazer solicitações de rede. No entanto, e se você estiver trabalhando em uma plataforma que não oferece suporte a threads, como o Google App Engine ou alguns sistemas incorporados? Nesse caso, você pode querer usar o dummy_threading módulo, que fornece uma substituição imediata para o rosqueamento módulo.
python download dummy_threading
DOWNLOAD: https://shurll.com/2vSOCK
Introdução
O dummy_threading module é uma biblioteca Python que imita a interface do rosqueamento módulo, mas sem realmente criar nenhum encadeamento. Destina-se a ser importado quando o _fio módulo (a interface de baixo nível para threads) não está disponível em sua plataforma. A sugestão de uso é:
try: import threading except ImportError: import dummy_threading as threading
Dessa forma, você pode usar o mesmo código para ambientes com e sem encadeamento, sem precisar alterar mais nada. No entanto, você deve ter cuidado para não usar dummy_threading onde o impasse pode ocorrer a partir de um encadeamento sendo criado que bloqueia a espera de outro encadeamento ser criado. Isso geralmente ocorre com o bloqueio de E/S, como a leitura de um arquivo ou soquete. Nesses casos, você deve usar E/S assíncrona ou evitar completamente o uso de encadeamentos.
Como funciona o Dummy_threading
O dummy_threading O módulo fornece uma interface duplicada para o rosqueamento module, o que significa que ele possui as mesmas classes, funções e constantes do módulo original. Por exemplo, você pode criar um dummy_threading.Thread objeto com os mesmos argumentos de um threading.Thread objeto e chame seu começar(), juntar(), e Está vivo() métodos. Você também pode usar dummy_threading.Lock, dummy_threading.Semaphore, dummy_threading.Evento, e outras primitivas de sincronização como você faria com rosqueamento.
A diferença é que dummy_threading na verdade, não cria nenhum encadeamento. Em vez disso, ele executa os encadeamentos sequencialmente e de forma síncrona no encadeamento principal. Isso significa que apenas um thread pode ser executado por vez e será bloqueado até que termine ou libere seu bloqueio. Isso também significa que não há simultaneidade ou paralelismo em seu programa e que o bloqueio global do interpretador (GIL) é sempre mantido pelo thread principal.
A desvantagem dessa abordagem é que ela pode causar problemas de impasse e memória se você não for cuidadoso. Por exemplo, se você criar um thread que adquire um bloqueio e aguarda a criação de outro thread, ele nunca liberará o bloqueio e o segundo thread nunca será criado. Isso resultará em um impasse, onde o programa trava indefinidamente. Da mesma forma, se você criar muitos threads sem juntá-los ou excluí-los, consumirá muita memória e deixará o programa lento. Portanto, você deve usar dummy_threading com moderação e apenas para fins de teste.
Exemplos de uso de Dummy_threading
Para ilustrar como dummy_threading funciona, vamos ver alguns exemplos de como usá-lo em um programa Python. Primeiro, vamos criar uma função simples que imprima uma mensagem e durma por um segundo:
import time def print_and_sleep(msg): print(msg) time.sleep(1)
A seguir, vamos criar e iniciar duas threads que chamam esta função com diferentes mensagens:
tente: import threading exceto ImportError: import dummy_threading as threading t1 = threading.Thread(target=print_and_sleep, args=("Olá do thread 1")) t2 = threading.Thread(target=print_and_sleep, args=("Olá do thread 2")) t1.start() t2.start()
Se executarmos este código com o rosqueamento módulo, veremos algo assim:
Olá do tópico 1 Olá do tópico 2
Isso mostra que os threads estão executando concorrentemente e assincronamente, pois imprimem suas mensagens sem esperar um pelo outro. No entanto, se executarmos esse código com o dummy_threading módulo, veremos algo assim:
Olá do tópico 1 # pausa de um segundo Olá do tópico 2 # pausa de um segundo
Isso mostra que as threads estão rodando de forma sequencial e síncrona, pois imprimem suas mensagens uma após a outra, com uma pausa entre elas. Isso ocorre porque o dummy_threading módulo executa os encadeamentos no encadeamento principal e bloqueia até que cada encadeamento termine ou ceda.
Para demonstrar como dummy_threading pode levar a um impasse, vamos modificar nossa função para adquirir um bloqueio antes de imprimir e dormir:
lock = threading.Lock() def print_and_sleep(msg): lock.acquire() print(msg) time.sleep(1)
Se executarmos este código com o rosqueamento módulo, veremos algo assim:
Olá do tópico 1 # pausa de um segundo Olá do tópico 2 # pausa de um segundo
Isso mostra que os encadeamentos ainda estão sendo executados simultaneamente e de forma assíncrona, mas também são sincronizados pelo bloqueio. O primeiro thread adquire o bloqueio, imprime sua mensagem, dorme por um segundo e libera o bloqueio. Em seguida, o segundo thread adquire o bloqueio, imprime sua mensagem, dorme por um segundo e libera o bloqueio. No entanto, se executarmos esse código com o dummy_threading módulo, veremos algo assim:
Hello from thread 1 # o programa trava indefinidamente
Isso mostra que o programa entrou em uma situação de impasse. A primeira thread adquire o bloqueio, imprime sua mensagem, dorme por um segundo, mas não libera o bloqueio. O segundo thread tenta adquirir o bloqueio, mas ele já está sendo mantido pelo primeiro thread. Desde o dummy_threading módulo executa os threads no thread principal, ele bloqueia até que o segundo thread adquira o bloqueio. Mas isso nunca vai acontecer, porque o primeiro fio ainda está segurando. Portanto, o programa trava indefinidamente.
Conclusão
O dummy_threading module é uma biblioteca Python que fornece uma interface duplicada para o rosqueamento módulo, mas sem realmente criar nenhum encadeamento. É útil para fins de teste e depuração ao trabalhar em plataformas que não oferecem suporte a threads. No entanto, tem algumas limitações e desvantagens que o tornam inadequado para uso em produção. Ele executa as threads sequencialmente e de forma síncrona na thread principal, o que significa que não há simultaneidade ou paralelismo em seu programa. Também pode causar problemas de impasse e memória se você não for cuidadoso com seu código.
Se você quiser usar dummy_threading, você deve importá-lo como rosqueamento, para que você possa alternar facilmente entre ambientes encadeados e não encadeados. Você também deve evitar usá-lo onde um impasse pode ocorrer a partir de um encadeamento sendo criado que bloqueia a espera de outro encadeamento ser criado. Isso geralmente ocorre com o bloqueio de operações de E/S. Nesses casos, você deve usar E/S assíncrona ou evitar completamente o uso de encadeamentos. Você também deve usar dummy_threading com moderação e apenas para fins de teste, pois pode consumir muita memória e tornar seu programa lento.
Se você quiser aprender mais sobre dummy_threading, você pode conferir a documentação oficial ou alguns tutoriais online. Você também pode baixar o módulo do PyPI ou GitHub e experimentar você mesmo. No entanto, lembre-se que dummy_threading não é um substituto para o encadeamento real e você deve usá-lo com cautela e consciência.
perguntas frequentes
Qual é a diferença entre dummy_threading e threading?
O dummy_threading O módulo fornece uma interface duplicada para o rosqueamento módulo, mas sem realmente criar nenhum encadeamento. Ele executa as threads sequencialmente e de forma síncrona na thread principal, o que significa que não há simultaneidade ou paralelismo em seu programa. O rosqueamento O módulo, por outro lado, cria e gerencia vários threads de execução em seu programa.Ele permite que você execute tarefas simultâneas, como executar processos em segundo plano, lidar com a entrada do usuário ou fazer solicitações de rede.
O dummy_threading está obsoleto no Python 3?
Não, dummy_threading não é obsoleto no Python 3. Ainda está disponível como um módulo de biblioteca padrão e funciona com Python 2 e Python 3. No entanto, raramente é usado na prática, já que a maioria das plataformas suporta threads hoje em dia. Além disso, o Python 3 introduziu novos recursos e módulos que tornam o threading mais fácil e eficiente, como assíncrono, multiprocessamento, e concorrentes.futuros.
Como posso evitar um impasse ao usar dummy_threading?
Para evitar impasses ao usar dummy_threading, você deve ter cuidado para não usá-lo onde um impasse pode ocorrer a partir de um encadeamento sendo criado que bloqueia a espera de outro encadeamento ser criado. Isso geralmente ocorre com o bloqueio de operações de E/S, como a leitura de um arquivo ou soquete. Nesses casos, você deve usar E/S assíncrona ou evitar completamente o uso de encadeamentos. Você também deve usar dummy_threading com moderação e apenas para fins de teste, pois pode consumir muita memória e tornar seu programa lento.
Posso usar dummy_threading com outros módulos que dependem de threading?
Você pode usar dummy_threading com outros módulos que dependem de threading, desde que não dependam da concorrência ou paralelismo de threads. Por exemplo, você pode usar dummy_threading com o exploração madeireira, fila, ou _fio módulos, pois eles não exigem que threads sejam executados simultaneamente ou de forma assíncrona. No entanto, você não pode usar dummy_threading com módulos que precisam de threads para executar em paralelo ou se comunicar entre si, como multiprocessamento, socketserver, ou Tkinter.
Quais são algumas alternativas para dummy_threading se o threading não estiver disponível?
Se o encadeamento não estiver disponível em sua plataforma, considere algumas alternativas para dummy_threading. Uma opção é usar a programação assíncrona, que permite escrever código que pode lidar com várias tarefas sem bloqueio ou espera. Por exemplo, você pode usar o assíncrono, aiohttp, ou tornado módulos para escrever código assíncrono que pode manipular solicitações de rede, entrada do usuário ou consultas de banco de dados. Outra opção é usar o multiprocessamento, que permite criar e gerenciar vários processos em seu programa. Por exemplo, você pode usar o multiprocessamento, escuro, ou raio módulos para escrever código paralelo que pode aproveitar várias CPUs ou GPUs.
: : : : : /Lib/dummy_threading.py 0517a86e26
Comentários