目的: 为了让代码能够并发执行,向创建线程并在核实的时候销毁它。方法: 由于目的比较单纯,只是讲解基础的线程创建方法,所以可以直接使用threading库中的Thread类来实例化一个线程对象。pythonfromthreadingimportThreaddefrunningtime(n):此函数可以称之为线程处理函数;即在线程中所做的事情importtimewhilen0:n1print(n)time。sleep(2)print(done。。。)线程中事务处理完成的提示tThread(targetrunningtime,args(10,))创建线程t,事务处理函数为runningtime,函数参数实参为10t。start()线程在创建之初是不会运行的,只有在使用start之后才会启动var5whilevar:var1importtimetime。sleep(1)print(thisismainthread。。。runningbelow,var,s)t。join()加入到t中去,换句话说,主线程会等待t线程运行结束;join具有阻塞性;不加这句话,主线程会自动结束,而线程t仍在运行直到结束print(mainthreadisend。。。)在t结束后再结束主线程为了方便你们看结果,我将结果粘贴在此处9thisismainthread。。。runningbelow4sthisismainthread。。。runningbelow3s8thisismainthread。。。runningbelow2s7thisismainthread。。。runningbelow1sthisismainthread。。。runningbelow0s6543210done。。。mainthreadisend。。。 例子,用户输入两个数字,并且求其两个数字的四则运算的结果:fromthreadingimportThreaddefaddfunc(x,y):print(xy)defsubfunc(x,y):print(xy)defmultfunc(x,y):print(xy)defpfunc(x,y):print(xy)ltfunc〔addfunc,subfunc,multfunc,pfunc〕num1,num2int(input(请输入数字1:)),int(input(请输入数字2:))请各位不要纠结这里有没有异常的问题,这不是博客的重点forfuncinltfunc:tThread(targetfunc,args(num1,num2))t。start()结果为:请输入数字1:20请输入数字2:133372601。5384615384615385Processfinishedwithexitcode0 除了以上的一些功能以外,在python线程 中没有其他的诸如给线程发信号、设置线程调度属性、执行任何其他高级操作的功能了,如果需要这些功能,就需要手工编写了。 另外,需要注意的是,由于GIL(全局解释器锁)的存在,限制了在python解释器当中只允许运行一个线程。基于这个原因,不停该使用python线程来处理计算密集型的任务,因为在这种任务重我们希望在多个CPU核心上实现并行处理。Python线程更适合于IO处理以及设计阻塞操作的并发执行任务(即等待IO响应或等待数据库取出结果等)。 如何判断线程是否已经启动? 目的:我们加载了一个线程,但是想要知道这个线程什么时候才会开始运行? 方法: 线程的核心特征我认为就是不确定性,因为其什么时候开始运行,什么时候被打断,什么时候恢复执行,这不是程序员能够控制的,而是有系统调度 来完成的。如果遇到像某个线程的运行依托于其他某个线程运行到某个状态时该线程才能开始运行,那么这就是线程同步 问题,同样这个问题非常棘手。要解决这类问题我们要借助threading中的Event对象。 Event其实和条件标记类似,匀速线程 等待某个时间发生。初始状态时事件被设置成0。如果事件没有被设置而线程正在等待该事件,那么线程就会被阻塞,直到事件被设置位置,当有线程设置了这个事件之后,那么就会唤醒正在等待事件的线程,如果线程等待的事件已经设置了,那么线程会继续执行。 一个例子:fromthreadingimportThread,Eventimporttimedefcountdown(n,startevt):print(countstarting。。。)startevt。set()whilen:n1time。sleep(2)startevtEvent()tThread(targetcountdown,args(5,startevt))t。start()startevt。wait()没有了join(),但是同样countdown的打印永远会出现在countstarting之后print(countdownisend。。。)结果:countstarting。。。countdownisend。。。 如上能够确定的是,主线程会在线程t运行结束时再运行。