Estou um pouco confuso sobre se o multithreading funciona ou não em Python.
Sei que tem havido muitas perguntas sobre isso e li muitas delas, mas ainda estou confuso. Sei por experiência própria e vi outras pessoas postarem suas próprias respostas e exemplos aqui no StackOverflow que o multithreading é realmente possível em Python. Então, por que todo mundo diz que o Python está bloqueado pelo GIL e que apenas um thread pode ser executado por vez? Claramente funciona. Ou há alguma distinção que não estou entendendo aqui?
Muitos participantes / participantes também mencionam que o threading é limitado porque não faz uso de vários núcleos. Mas eu diria que eles ainda são úteis porque funcionam simultaneamente e, portanto, fazem a carga de trabalho combinada mais rapidamente. Quero dizer, por que haveria mesmo um módulo de thread Python caso contrário?
Atualizar:
Obrigado por todas as respostas até agora. Pelo que entendi, o multithreading só será executado em paralelo para algumas tarefas de E / S, mas só pode ser executado um de cada vez para várias tarefas principais vinculadas à CPU.
Não tenho certeza do que isso significa para mim em termos práticos, então darei apenas um exemplo do tipo de tarefa que gostaria de multithread. Por exemplo, digamos que eu queira percorrer uma lista muito longa de strings e fazer algumas operações básicas com strings em cada item da lista. Se eu dividir a lista, enviar cada sublista para ser processada por meu código de loop / string em um novo encadeamento e enviar os resultados de volta em uma fila, essas cargas de trabalho serão executadas aproximadamente ao mesmo tempo? Mais importante, isso teoricamente irá acelerar o tempo que leva para executar o script?
Outro exemplo poderia ser se eu pudesse renderizar e salvar quatro imagens diferentes usando PIL em quatro threads diferentes e fazer com que isso fosse mais rápido do que processar as imagens uma a uma após a outra? Acho que esse componente de velocidade é o que realmente estou pensando, e não qual é a terminologia correta.
Eu também sei sobre o módulo de multiprocessamento, mas meu principal interesse agora é para cargas de tarefas pequenas a médias (10-30 segundos) e, portanto, acho que multithreading será mais apropriado porque os subprocessos podem demorar para iniciar.