python多线程

一般来说,python使用线程有两种模式:
(1)创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;

(2)继承Thread类,创建一个新的class,将要执行的代码 写到run函数里面。

(1)方法:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import threading,time

def test(loop, sec):
    print 'start loop', loop, 'at:', time.ctime()
    time.sleep(sec)
    print 'loop', loop, 'done at:', time.ctime()

def main():
    print 'starting at:', time.ctime()

    for i in xrange(10):
        th = threading.Thread(target= test,args= (i,2))
        th.start()
        th.join()
    print 'all Done at:', time.ctime()

if __name__ == '__main__':
        main()
结果:

starting at: Tue May  2 14:01:49 2017
start loop 0 at: Tue May  2 14:01:49 2017
loop 0 done at: Tue May  2 14:01:51 2017
start loop 1 at: Tue May  2 14:01:51 2017
loop 1 done at: Tue May  2 14:01:53 2017
start loop 2 at: Tue May  2 14:01:53 2017
loop 2 done at: Tue May  2 14:01:55 2017
start loop 3 at: Tue May  2 14:01:55 2017
loop 3 done at: Tue May  2 14:01:57 2017
start loop 4 at: Tue May  2 14:01:57 2017
loop 4 done at: Tue May  2 14:01:59 2017
start loop 5 at: Tue May  2 14:01:59 2017
loop 5 done at: Tue May  2 14:02:01 2017
start loop 6 at: Tue May  2 14:02:01 2017
loop 6 done at: Tue May  2 14:02:03 2017
start loop 7 at: Tue May  2 14:02:03 2017
loop 7 done at: Tue May  2 14:02:05 2017
start loop 8 at: Tue May  2 14:02:05 2017
loop 8 done at: Tue May  2 14:02:07 2017
start loop 9 at: Tue May  2 14:02:07 2017
loop 9 done at: Tue May  2 14:02:09 2017
all Done at: Tue May  2 14:02:09 2017

(2)方法

#!/usr/bin/python
# -*- coding: utf-8 -*-

import threading,time

class myThread (threading.Thread) :
      def __init__(self, loop, sec) :
          super(myThread, self).__init__()
          self.loop = loop
          self.sec = sec

      def run(self):
          print 'start loop', self.loop, 'at:', time.ctime()
          time.sleep(self.sec)
          print 'loop', self.loop, 'done at:', time.ctime()
def main(): 
     print 'starting at:', time.ctime()
    
     for i in xrange(10):
         th = myThread(i,2)
         th.start()
         th.join()
    
     print 'all Done at:', time.ctime()

if __name__ == '__main__':
        main()
结果:

starting at: Tue May  2 14:13:17 2017
start loop 0 at: Tue May  2 14:13:17 2017
loop 0 done at: Tue May  2 14:13:19 2017
start loop 1 at: Tue May  2 14:13:19 2017
loop 1 done at: Tue May  2 14:13:21 2017
start loop 2 at: Tue May  2 14:13:21 2017
loop 2 done at: Tue May  2 14:13:23 2017
start loop 3 at: Tue May  2 14:13:23 2017
loop 3 done at: Tue May  2 14:13:25 2017
start loop 4 at: Tue May  2 14:13:25 2017
loop 4 done at: Tue May  2 14:13:27 2017
start loop 5 at: Tue May  2 14:13:27 2017
loop 5 done at: Tue May  2 14:13:29 2017
start loop 6 at: Tue May  2 14:13:29 2017
loop 6 done at: Tue May  2 14:13:31 2017
start loop 7 at: Tue May  2 14:13:31 2017
loop 7 done at: Tue May  2 14:13:33 2017
start loop 8 at: Tue May  2 14:13:33 2017
loop 8 done at: Tue May  2 14:13:35 2017
start loop 9 at: Tue May  2 14:13:35 2017
loop 9 done at: Tue May  2 14:13:37 2017
all Done at: Tue May  2 14:13:37 2017





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python多线程可以使用内置的`threading`模块来实现。这个模块提供了一些对象和方法,可以方便地创建和管理线程。 以下是一个简单的多线程示例,它创建了两个线程,每个线程都打印数字1到5: ```python import threading def print_numbers(): for i in range(1, 6): print(threading.current_thread().name, i) # 创建两个线程 t1 = threading.Thread(target=print_numbers) t2 = threading.Thread(target=print_numbers) # 启动线程 t1.start() t2.start() # 等待线程结束 t1.join() t2.join() print("All threads have finished.") ``` 在这个示例中,我们首先定义了一个`print_numbers()`函数,它用于打印数字1到5,并且在每个数字前面打印线程的名称。然后,我们创建了两个线程`t1`和`t2`,它们都指向`print_numbers()`函数。接下来,我们启动这两个线程,并等待它们完成,最后输出"All threads have finished."。 注意,`threading.current_thread().name`用于获取当前线程的名称。在这个示例中,我们没有指定线程的名称,因此它们将默认为"Thread-1"和"Thread-2"。 多线程可以提高程序的执行效率,但是也需要注意线程安全问题,比如并发访问共享变量可能会导致数据不一致的问题。因此,在编写多线程程序时,需要特别注意线程安全问题。 ### 回答2: Python多线程是指在一个程序中同时执行多个线程,每个线程都可以独立执行不同的任务。Python多线程是基于线程模块实现的,通过创建多个线程对象来实现多线程的功能。 Python多线程的使用需要导入threading模块,使用threading.Thread类来创建线程对象。通过调用线程对象的start()方法,线程就会开始执行。线程可以是执行同一个函数,也可以是执行不同的函数,甚至可以是执行不同的类的方法。 线程之间可以共享全局变量,但需要避免多个线程同时修改全局变量的情况,可以通过互斥锁机制来保证数据的一致性。 Python多线程的优点是能够提高程序的执行效率,特别是在IO操作较多的情况下,多线程可以充分利用CPU的空闲时间。另外,多线程还可以实现一些并发的功能,例如同时下载多个文件、同时处理多个网络请求等。 然而,Python多线程在处理CPU密集型任务上并不适用,因为在Python中,多线程并不能利用多核CPU的优势,由于Python的GIL(全局解释器锁)机制,多线程在CPU密集型任务上的效率并不比单线程高。 总结来说,Python多线程适用于IO密集型任务,能够提高程序的执行效率和实现并发的功能,但对于CPU密集型任务,单线程可能更适合。 ### 回答3: Python 多线程是指在一个程序中同时运行多个线程,每个线程独立执行其任务。Python 中的多线程可以通过使用 threading 模块来实现。 在 Python 中,多线程的主要优势是能够提升程序的执行效率。通过多线程,可以将耗时较长的任务分配给不同的线程来并行执行,从而缩短程序的总执行时间。这尤其适用于那些需要频繁进行网络请求、IO 操作或者计算密集型任务的程序。 使用 Python 的 threading 模块可以很方便地创建和管理线程。通过创建 Thread 对象并传入要执行的函数,就可以创建一个新的线程。可以使用 start() 方法来启动线程,并使用 join() 方法来等待线程执行完成。 需要注意的是,Python 中的多线程并不能真正实现并行执行,而是通过在不同任务之间快速切换来模拟并行。这是由于 Python 的全局解释器锁(GIL)的存在,它使得同一时间只有一个线程能够执行 Python 的字节码。因此,在计算密集型任务上,使用多线程并不能获得真正的并行加速。 另外,多线程在处理共享资源时需要注意线程安全问题。多个线程同时访问和修改共享数据可能会导致数据不一致或者竞争条件。在这种情况下,可以通过使用锁(Lock)等同步机制来确保数据的正确访问和更新。 总而言之,Python 多线程可以提升程序的执行效率,适用于需要进行网络请求、IO 操作或者并发处理的任务。然而,在计算密集型任务上,并不能实现真正的并行加速。同时,在处理共享资源时需要注意线程安全问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值