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