Python进程与线程:
什么是线程?什么是进程?
线程是计算机操作系统能够运算调度的最小单位。它被包含在进程之中。是进程中实际运作单位。一条线程是指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同任务。
进程要操作CPU,必须先要创建一个线程,进程是资源的集合,线程是进程的内涵,是一串指令的集合。
所有在同一个进程里的线程是共享同一块内存空间。
线程与进程的区别:
1. 线程共享内存空间,进程的内存是独立的
2.两个子进程实现互独立的,不可以相互访问。
3.同一个进程的线程之间可以直接交流,两个进程想要通信,必须通过一个中间代理来实现。
4.创建新线程很简单,创建新进程需要对其父进程进行一次克隆。
5.一个线程可以控制和操作同一进程里的其他线程,但是进程只能操作子进程。
6.对于主线程的修改,有可能影响到其他线程的运行。但是对一个父进程的修改,不会影响子进程的运行。
实例一:
import threading
import time
def run(n):
print("task",n)
time.sleep(2)
t1=threading.Thread(target=run,args=("t1",))
t2=threading.Thread(target=run,args=("t2",))
t1.start()
t2.start()
实例二:
import threading
class MyThread(threading.Thread):
def __init__(self,n):
super(MyThread,self).__init__()
self.n=n
def run(self):
print("runnint task:",self.n)
t1=MyThread("t1")
t2=MyThread("t2")
t1.start()
t2.start()
实例三:
import threading,time
class MyThread(threading.Thread):
def __init__(self,n):
super(MyThread,self).__init__()
self.n=n
def run(self):
print("runnint task:",self.n)
#time.sleep(2)
start_time=time.time()
t_obj=[]
for i in range(50):
t=MyThread("t-%s"%i)
t.start()
#t.join()
t_obj.append(t)
for t in t_obj:#循环实例列表,等待所有线程结束
t.join()
print("cost:",time.time()-start_time)
守护进程,守护主线程退出,子线程无论完没完成都会退出:
import threading,time
class MyThread(threading.Thread):
def __init__(self,n):
super(MyThread,self).__init__()
self.n=n
def run(self):
print("runnint task:",self.n)
#time.sleep(2)
start_time=time.time()
t_obj=[]
for i in range(50):
t=MyThread("t-%s"%i)
t.setDaemon(True)#把当前线程设置为守护线程,一定在start之前
t.start()
#t.join()
t_obj.append(t)
#for t in t_obj:
# t.join()
print("cost:",time.time()-start_time)