time.sleep – 睡觉线程或进程?

在* nix的Python中, time.sleep()阻塞线程或进程?

它阻塞线程。 如果你查看Python源代码中的Modules / timemodule.c,你会发现在调用floatsleep() ,睡眠操作的实质部分被封装在Py_BEGIN_ALLOW_THREADS和Py_END_ALLOW_THREADS块中,允许其他线程继续执行而目前的一个睡觉。 你也可以用一个简单的python程序来testing它:

 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() 

哪个会打印:

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

它只会睡眠线程,除非应用程序只有一个线程,在这种情况下,它将睡眠线程,并有效地处理。

关于睡眠的python文档没有指定这个,所以我当然可以理解这个混淆!

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

只是线程。

线程会阻塞,但进程仍然活着。

在单线程应用程序中,这意味着在睡觉时,所有内容都被阻塞。 在multithreading应用程序中,只有显式“睡眠”的线程会被阻塞,而其他线程仍然在进程中运行。

只有线程,除非你的进程有一个线程。

进程本身不可运行。 在执行方面,进程只是一个线程的容器。 意思是你不能暂停这个过程。 这根本不适用于stream程。

在Python中作为后台线程运行一个方法

  import threading import time class ThreadingExample(object): """ Threading example class The run() method will be started and it will run in the background until the application exits. """ def __init__(self, interval=1): """ Constructor :type interval: int :param interval: Check interval, in seconds """ self.interval = interval thread = threading.Thread(target=self.run, args=()) thread.daemon = True # Daemonize thread thread.start() # Start the execution def run(self): """ Method that runs forever """ while True: # Do something print('Doing something imporant in the background') time.sleep(self.interval) example = ThreadingExample() time.sleep(3) print('Checkpoint') time.sleep(2) print('Bye')