python 多线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 多线程相关的知识,希望对你有一定的参考价值。

Python模块:threading

目录 00x1 多线程基础讲解
 00x2 简单多线程案例

 00x1 多线程基础讲解

要使用多线程的函数可以实例化一个Thread对象,每个Thread对象代表着一个线程,可以通过start()方法,开始运行。

t = threading.Thread(target=worker)   #将worker函数实例化为Thread对象
t.start()    #实例化以后需要开始这个线程

由于python的多线程是伪多线程(并非真正意义的多线程)所以其线程并发出来的结果呈无规律状态。比如如下代码:

技术分享
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#by def

import threading

def qwe():
    print 1

a = threading.Thread(target=qwe)
b = threading.Thread(target=qwe)
    
a.start()
b.start()
print def
View Code

按照我惯例最后print的应该是最后输出才对,但实际运行了并非如此

执行结果:技术分享技术分享

之所以说python的多线程是伪的多线程就是因为如此。真正的多线程好比花了好几个人同时去工作直至把他做完。而python只是一个人只做一点就丢给另外一个人。每个人做一点,所以在很多时候就会导致线程还没有执行完毕就执行线程以外的东西。这里就引进了一个join。相当于一个线程的分界线,告诉Thread给你的任务先做完了你才能执行下面的代码。不然就打死你。

如此代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
#by def

import threading

def qwe():
    print 1

a = threading.Thread(target=qwe)
b = threading.Thread(target=qwe) //两个线程
    
a.start()
b.start()
a.join()   #加上join了以后就不会逾越这个分界线了
b.join()
print def
执行结果:技术分享

 但当线程有参数的时候呢?

 

 

 

简单案例:

#!/usr/bin/python
import threading
import time
 
def worker():
    print "worker"
    time.sleep(1)
    return
 
for i in xrange(5):
    t = threading.Thread(target=worker)
    t.start()

t.jion()

 

以上是关于python 多线程的主要内容,如果未能解决你的问题,请参考以下文章

[Python3] 043 多线程 简介

python中的多线程和多进程编程

多线程 Thread 线程同步 synchronized

多个用户访问同一段代码

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

线程学习知识点总结