前言:本系列将包含Python并行编程的相关技术内容,包括Python线程、Python进程、并发编程的异步模式及终极大法Python分布式计算如Celery、SCOOP等相关技术。
线程看起来就像轻量级的进程,而进程又是什么呢? 进程即咱们平时运行程序,好比经过点击图标打开的浏览器,QQ都是进程,进程拥有本身的独立的内存空间地址,能够拥有多个线程;即线程是存在进程内,也就意味着一个进程内的线程能够共享一些资源,其线程间的切换也就比进程低得多,多个线程能够并行及并发执行,共享数据和资源,因此咱们多数时候的线程通讯都是利用共享信息的空间进行通讯,这也是后面谈到的线程管理必备的多种线程通讯方式了。python
import threading
import time
# 用于实例化线程目标函数
def function(i):
time.sleep(2)
print('Thread {} is running.'.format(i))
time.sleep(2)
return
for i in range(5):
# Python模块threading.Thread方法
t = threading.Thread(target=function, args=(i, ))
t.start()
复制代码
运行截图以下: 编程
target
即函数名,而后若是须要运行的目标函数有参数须要传递的话便可传入
args
元组,注意此处传入的是
元组tuple
。 而后咱们在调用
start()
方法后启动实例化的线程
import threading
import time
class myThread(threading.Thread):
def __init__(self, i):
threading.Thread.__init__(self)
self.i = i
def run(self):
time.sleep(2)
print('Thread {} is running.'.format(self.i))
time.sleep(2)
return
for i in range(1, 6):
t = myThread(i)
t.start()
复制代码
运行截图以下: 浏览器
__init__
方法来传递参数,而后重写
run()
方法来实现目标函数,那么当咱们建立出新的子类后就能够实例化该子类并经过
start()
方法来启动线程。
接下来咱们在运行一段代码:多线程
import threading
import time
class myThread(threading.Thread):
def __init__(self, i):
threading.Thread.__init__(self)
self.i = i
def run(self):
time.sleep(2)
print('Thread {} is running.'.format(self.i))
time.sleep(2)
return
print('Mian THread starting')
for i in range(1, 6):
t = myThread(i)
t.start()
print('Mian THread end')
复制代码
运行截图以下: 并发
print()
用于打印主线程的运行状态,咱们能够看见在默认状况下主现成直接执行完就退出了,此时子线程们还在执行过程当中,那么若是咱们添加setDaemon(True)方法呢:
import threading
import time
class myThread(threading.Thread):
def __init__(self, i):
threading.Thread.__init__(self)
self.i = i
def run(self):
time.sleep(2)
print('Thread {} is running.'.format(self.i))
time.sleep(2)
return
print('Mian THread starting')
for i in range(1, 6):
t = myThread(i)
t.setDaemon(True)
t.start()
print('Mian THread end')
复制代码
运行截图以下: app
import threading
import time
class myThread(threading.Thread):
def __init__(self, i):
threading.Thread.__init__(self)
self.i = i
def run(self):
time.sleep(2)
print('Thread {} is running.'.format(self.i))
time.sleep(2)
return
print('Mian THread starting')
threads = []
for i in range(1, 6):
t = myThread(i)
t.start()
threads.append(t)
for t in threads:
t.join()
print('Mian THread end')
复制代码
运行截图以下: 异步
join()
所完成的工做就是线程同步,即主线程任务结束以后,进入阻塞状态,一直等待其余的子线程执行结束以后,主线程再终止。