Improve concurrent.interpreters documentation
Aberta
Ninguém assumiu esta issue ainda.
docs
topic-subinterpreters
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
Documentation
We need a better documentation for https://docs.python.org/3/library/concurrent.interpreters.html
I tried this, but I don't understand
- how to use queue
- prepare_main purpose
- exec parameters like dedent
- I got funny crashes
####################################################################################################
from concurrent import interpreters as CI
from pprint import pprint
from textwrap import dedent
import queue
####################################################################################################
main_interpreter = CI.get_main()
print(f"Main is {main_interpreter}")
current_interpreter = CI.get_current()
print(f"Current is {current_interpreter}")
queue = CI.create_queue()
def task_runner(index):
print("Task runner", index)
print(f" Current is {current_interpreter}")
globals_ = globals()
# pprint(globals_)
print(" Globals:")
for key, value in globals().items():
if key == '__builtins__':
print(f" __builtins__: ...")
else:
print(f" {key}: {value}")
# Crash
# Main is Interpreter(0)
# Current is Interpreter(1)
# concurrent.interpreters.ExecutionFailed: NameError: name 'foo' is not defined
#! print(foo)
# Block
#! print(f" #{index} from queue {queue.get()}")
return 'ok'
# if True:
if current_interpreter is main_interpreter:
# queue = CI.create_queue()
interpreters = []
NUMBER_OF_INTERPRETERS = 4
for i in range(NUMBER_OF_INTERPRETERS):
_ = CI.create()
# Bind objects in the interpreter’s __main__ module
_.prepare_main(ns=None, foo=123)
interpreters.append(_)
for _ in CI.list_all():
print(f"Interpreter id {_.id} running {_.is_running()} whence '{_.whence}'")
print("Call...")
print()
# exec(code, /, dedent=True)
interpreters[0].exec(dedent('''
print(f"Exec hello {foo}")
'''))
print()
rc = interpreters[0].call(task_runner, 0)
print(rc)
print()
threads = []
for i in range(NUMBER_OF_INTERPRETERS):
thread = interpreters[i].call_in_thread(task_runner, i)
print(f"Thread #{i} {thread}")
threads.append(thread)
NUMBER_OF_TASKS = 10
for i in range(NUMBER_OF_TASKS):
queue.put(i)
for thread in threads:
thread.join()
# print()
# print(queue)
# Block main
#! print(queue.get())
# try:
# except queue.ShutDown:
# pass
else:
pass
Linked PRs
- gh-145657
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece pela documentação de concurrent.interpreters em docs.python.org/3/library/concurrent.interpreters.html e reproduza o exemplo fornecido. Esclareça o uso de filas, prepare_main, parâmetros de exec como dedent e os crashes relatados; o trabalho estará concluído quando a documentação explicar esses casos com um exemplo funcional e compreensível.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- documentation
- Tipo de issue
- Documentação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 35/100