Pergunta

Em Python para * nix, faz bloco time.sleep() o fio ou o processo?

Foi útil?

Solução

Ele bloqueia o segmento. Se você olhar em módulos / timemodule.c na fonte Python, você verá que na chamada para floatsleep(), a parte substantiva da operação sono está envolto em um bloco Py_BEGIN_ALLOW_THREADS e Py_END_ALLOW_THREADS, permitindo que outros segmentos para continuar a executar enquanto a atual dorme. Você também pode testar isso com um programa de python simples:

import time
from threading import Thread

class worker(Thread):
    def run(self):
        for x in xrange(0,11):
            print x
            time.sleep(1)

class waiter(Thread):
    def run(self):
        for x in xrange(100,103):
            print x
            time.sleep(5)

def run():
    worker().start()
    waiter().start()

Qual será impresso:

>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102

Outras dicas

Ela só vai dormir o fio, exceto no caso em que a sua aplicação tem apenas um único segmento, caso em que ele vai dormir o fio e eficazmente o processo também.

A documentação python no sono não especificar isso, porém, assim que eu posso certamente entender a confusão!

http://docs.python.org/2/library/time.html

Apenas o segmento.

O fio irá bloquear, mas o processo ainda está vivo.

Em uma única aplicação de rosca, isso significa que tudo está bloqueado enquanto você dorme. Em um aplicativo com vários segmentos, somente o segmento que você explicitamente 'dormir' irá bloquear e outros tópicos continuam a correr dentro do processo.

Apenas o segmento a menos que o processo tem um único segmento.

O processo não é executável por si só. No que diz respeito à execução, o processo é apenas um recipiente para threads. Ou seja, você não pode pausar o processo em tudo. Ele simplesmente não é aplicável a processo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top