线程:
线程是操作系统能够进行运算调度的最小单位。线程被包含在进程中,是进程中实际处理单位。一条线程就是一堆指令集合。
一条线程是指进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
进程:
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
区别:
进程(process)是一块包含了某些资源的内存区域。操作系统利用进程把它的工作划分为一些功能单元。
进程中所包含的一个或多个执行单元称为线程(thread)。进程还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问。
线程只能归属于一个进程并且它只能访问该进程所拥有的资源。当操作系统创建一个进程后,该进程会自动申请一个名为主线程或首要线程的线程。
处理IO密集型任务或函数用线程;
处理计算密集型任务或函数用进程。
创建线程
导入模块threading,通过threading.Thread()创建线程。其中target接收的是要执行的函数名字,args接收传入函数的参数,以元组()的形式表示。
启动线程
通过线程对象j.start()启动线程。
j.join()
在子线程执行完成之前,这个子线程的父线程将一直被阻塞。就是说,当调用join()的子进程没有结束之前,主进程不会往下执行。对其它子进程没有影响。
from time import ctime,sleep
import threading
def talk(content,loop):
for i in range(loop):
print("start Talk %s %s" %(content,ctime()) )
sleep(3)
def write(content,loop):
for i in range(loop):
print("start Write %s %s" %(content,ctime()))
sleep(3)
threads=[]
t1=threading.Thread(target=talk,args=('hello,my friends',2))
threads.append(t1)
t2=threading.Thread(target=write,args=('nice to see you',2))
threads.append(t2)
if __name__=='__main__':
for j in threads:
j.start()
for j in threads:
j.join()
print("all the end %r" %ctime())