1、多线程的理解
多进程和多线程都可以执行多个任务,线程是进程的一部分。线程的特点是线程之间可以共享内存和变量,资源消耗少(不过在Unix环境中,多进程和多线程资源调度消耗差距不明显,Unix调度较快),缺点是线程之间的同步和加锁比较麻烦。
2、Python多线程创建
在Python中,同样可以实现多线程,有两个标准模块thread和threading,不过我们主要使用更高级的threading模块。使用例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import threading import time def target(): print 'the curent threading %s is running' % threading.current_thread().name time.sleep(1) print 'the curent threading %s is ended' % threading.current_thread().name print 'the curent threading %s is running' % threading.current_thread().name t = threading.Thread(target=target) t.start() t.join() print 'the curent threading %s is ended' % threading.current_thread().name 输出: the curent threading MainThread is running the curent threading Thread-1 is running the curent threading Thread-1 is ended the curent threading MainThread is ended |
start是启动线程,join是阻塞当前线程,即使得在当前线程结束时,不会退出。从结果可以看到,主线程直到Thread-1结束之后才结束。
Python中,默认情况下,如果不加join语句,那么主线程不会等到当前线程结束才结束,但却不会立即杀死该线程。如不加join输出如下:
1 2 3 4 |
the curent threading MainThread is running the curent threading Thread-1 is running the curent threading MainThread is ended the curent threading Thread-1 is ended |
但如果为线程实例添加t.setDaemon(True)之后,如果不加join语句,那么当主线程结束之后,会杀死子线程。代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import threading import time def target(): print 'the curent threading %s is running' % threading.current_thread().name time.sleep(4) print 'the curent threading %s is ended' % threading.current_thread().name print 'the curent threading %s is running' % threading.current_thread().name t = threading.Thread(target=target) t.setDaemon(True) t.start() t.join() print 'the curent threading %s is ended' % threading.current_thread().name 输出如下: the curent threading MainThread is running the curent threading Thread-1 is runningthe curent threading MainThread is ended |
如果加上join,并设置等待时间,就会等待线程一段时间再退出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import threading import time def target(): print 'the curent threading %s is running' % threading.current_thread().name time.sleep(4) print 'the curent threading %s is ended' % threading.current_thread().name print 'the curent threading %s is running' % threading.current_thread().name t = threading.Thread(target=target) 2、Python多线程创建在Python中,同样可以实现多线程,有两个标准模块thread和threading,不过我们主要使用更高级的threading模块。使用例子:
start是启动线程,join是阻塞当前线程,即使得在当前线程结束时,不会退出。从结果可以看到,主线程直到Thread-1结束之后才结束。
但如果为线程实例添加t.setDaemon(True)之后,如果不加join语句,那么当主线程结束之后,会杀死子线程。代码:
如果加上join,并设置等待时间,就会等待线程一段时间再退出:
|