Python 多线程
在 Python 中,你可以使用 Python 2.x 中的 thread
模块或 Python 3 中的 _thread
模块来创建线程。我们将使用线程模块与之交互。
线程是一个操作系统进程,具有与正常进程不同的功能:
- 线程作为进程的子集存在
- 线程共享内存和资源
- 进程有不同的地址空间(在内存中)
你什么时候使用线程?通常当你希望函数与程序同时发生时。如果你创建服务器软件,你希望服务器不仅可以侦听一个连接,还可以侦听多个连接。简而言之,线程使程序能够一次执行多个任务。
Python 线程
让我们创建一个线程程序。在这个程序中,我们将启动 10 个线程,每个线程将输出其 id
。
import threading
class MyThread (threading.Thread):
def __init__(self,x):
self.__x = x
threading.Thread.__init__(self)
def run (self):
print str(self.__x)
for x in xrange(10):
MyThread(x).start()
输出:
0
1
...
9
如果运行一次,线程不必停止。线程可以定时,每隔 x
秒重复一次线程功能。
定时线程
在 Python 中,Timer
类是 Thread
类的子类。这意味着它的行为相似。我们可以使用 Timer
类来创建定时线程。定时器以 .start()
方法调用启动,就像常规线程一样。下面的程序创建一个在 5
秒后启动的线程。
#!/usr/bin/env python
from threading import *
def hello():
print "hello, world"
t = Timer(10.0, hello)
t.start()
使用线程重复功能
我们可以无限地执行线程,如下所示:
#!/usr/bin/env python
from threading import *
import time
def handleClient1():
while(True):
print "Waiting for client 1..."
time.sleep(5) # wait 5 seconds
def handleClient2():
while(True):
print "Waiting for client 2..."
time.sleep(5) # wait 5 seconds
t = Timer(5.0, handleClient1)
t2 = Timer(3.0, handleClient2)
t.start()
t2.start()