Segmentation fault with many go routines

Aberta
#13 2 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
28/100
Tipo de issue
Bug
Clareza
Precisa de esclarecimento
Status de atividade
Estagnada
Stack de tecnologia
python
Domínio
backend

Direção de pesquisa

Comece executando a reprodução fornecida com 10,000 goroutines usando os interpretadores Python e as versões de offset/fibers listados. Rastreie se o segmentation fault se origina em offset, fibers ou na interação entre eles e, em seguida, adicione um teste de regressão para a reprodução. Está concluído quando o programa não trava mais e produz 10001.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

bug

Running this program.

from offset import maintask, run, go, makechan

def gopher(left, right):
    value = right.recv()
    left.send(value + 1)

def starter(chan):
    chan.send(1)

@maintask
def main():
    leftmost = makechan()
    right = leftmost
    left = leftmost
    for _ in range(10000):
        right = makechan()
        go(gopher, left, right)
        left = right
    go(starter, right)
    print(leftmost.recv())

if __name__ == "__main__":
    run()

I get:

$ python gophers.offset.py
zsh: segmentation fault  python gophers.offset.py

The output I expected was 10001.

Tested with

  • Interpreters
    • Python 2.7.3 (87aa9de10f9ca71da9ab4a3d53e0ba176b67d086, Feb 03 2014, 13:03:18)[PyPy 2.2.1]
    • Python 3.3.3 (default, Dec 22 2013, 19:33:55)
  • offset library from github
  • fibers 0.3.0

I don't know if this is caused by the offset library, fibers library or any other combination so I decided to start from here. :)

Linguagem predominante
Python
Estrelas
380
Forks
15
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de benoitc/offset

Todas as issues de benoitc/offset

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.