Python 多线程与多进程

一、线程

一个线程就是一堆指令集合

分为:IO密集型任务或函数/计算密集型任务或函数

例子1  IO密集型任务或函数

 1 #__author: Lobin
 2 #__date:   2018/1/21
 3 import os
 4 import time
 5 import threading
 6 def foo(n):
 7     print('foo%s'%n)
 8     time.sleep(1)
 9     print('end foo')
10 def bar(n):
11     print('bar%s'%n)
12     time.sleep(2)
13     print('end bar')
14 thread1=threading.Thread(target=foo,args=(1,))
15 thread2=threading.Thread(target=bar,args=(2,))
16 thread1.start()
17 thread2.start()
18 thread1.join()
19 thread2.join()
20 print('..........main threading..........')

解析:

1.1 thread1=threading.Thread(target=foo,args=(1,))使用threading模块中的Thread创建类实例,参数target指向需要执行的任务/函数,args指向任务/函数的参数

1.2 thread1.start() 开启线程,执行任务/函数

1.3 thread1.join() 阻塞子线程的执行,等待子线程完成会到主线程

例子2 计算密集型任务或函数

 1 #__author: Lobin
 2 #__date:   2018/1/21
 3 import threading
 4 import time
 5 begin=time.time()
 6 def add(n):
 7     sum=0
 8     for i in range(n):
 9         sum+=i
10     print(sum)
11 th1=threading.Thread(target=add,args=(10000000,))
12 th2=threading.Thread(target=add,args=(10000000,))
13 th1.start()
14 th2.start()
15 th1.join()
16 th2.join()
17 # add(10000000)
18 # add(10000000)
19 end=time.time()
20 print(end-begin)

利用py2.7则多线程消耗时间更多

总结:如果是IO密集型的可以使用多线程

          如果是CPU计算密集型的可以改C

二、函数

1.join方法的作用是阻塞,等待子线程结束,join方法有一个参数是timeout,即如果主线程等待timeout,子线程还没有结束,则主线程强制结束子线程。

2.GIL(Global Interpreter Lock,全局解释器锁),同一时刻只能有一个线程在CPU中执行

3.线程共享创建他们的进程的内存空间以及资源,进程间不能共享内存空间以及资源

4.默认当主线程结束时如果子线程没有结束,则需要等待子线程结束

5.守护线程setDaemon(True)默认当主线程结束时,不等待子线程结束直接退出。如果你设置一个线程为守护线程,

就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。

整个Python会在所有的非守护线程退出后才会结束,即进程中没有非守护线程存在的时候才结束。

6.threading.current_thread()   当前的线程

7.threading.active_count()   当前激活的线程数量

posted on 2018-01-21 23:48  可爱的春哥  阅读(118)  评论(0)    收藏  举报

导航