原文: https://pythonspot.com/threading

在 Python 中,您可以使用 Python 2.x 中的threading模块或 Python 3 中的_thread模块创建线程。我们将使用threading模块与之交互。

线程是一种操作系统进程,具有与正常进程不同的功能:

  • 线程作为进程的子集存在
  • 线程共享内存和资源
  • 进程具有不同的地址空间(在内存中)

什么时候使用线程处理? 通常,当您希望功能与程序同时出现时。 如果创建服务器软件,则希望服务器不仅侦听一个连接,而且侦听许多连接。 简而言之,线程使程序能够一次执行多个任务。

Python 线程

让我们创建一个线程程序。 在此程序中,我们将启动 10 个线程,每个线程将输出其 ID。

  1. import threading
  2. # Our thread class
  3. class MyThread (threading.Thread):
  4. def __init__(self,x):
  5. self.__x = x
  6. threading.Thread.__init__(self)
  7. def run (self):
  8. print str(self.__x)
  9. # Start 10 threads.
  10. for x in xrange(10):
  11. MyThread(x).start()

输出:

  1. 0
  2. 1
  3. ...
  4. 9

如果运行一次,线程不必停止。 线程可以是定时的,每x秒重复执行一次线程功能。

定时线程

在 Python 中,Timer类是Thread类的子类。 这意味着它的行为类似。我们可以使用计时器类来创建定时线程。计时器是通过.start()方法调用启动的,就像常规线程一样。 下面的程序创建一个线程,该线程在 5 秒钟后启动。

  1. #!/usr/bin/env python
  2. from threading import *
  3. def hello():
  4. print "hello, world"
  5. # create thread
  6. t = Timer(10.0, hello)
  7. # start thread after 10 seconds
  8. t.start()

使用线程

重复执行功能我们可以像这样无休止地执行线程:

  1. #!/usr/bin/env python
  2. from threading import *
  3. import time
  4. def handleClient1():
  5. while(True):
  6. print "Waiting for client 1..."
  7. time.sleep(5) # wait 5 seconds
  8. def handleClient2():
  9. while(True):
  10. print "Waiting for client 2..."
  11. time.sleep(5) # wait 5 seconds
  12. # create threads
  13. t = Timer(5.0, handleClient1)
  14. t2 = Timer(3.0, handleClient2)
  15. # start threads
  16. t.start()
  17. t2.start()