标签:多线程
进程 pid 唯一标示符
使用kill杀死进程
主线程 创造一个进程的时候,会创造一个线程,这个线程被称为主线程
一个进程只有一个主线程
python里的多线程,不是真正意义上的多线程,只是多线程的假象
全局锁GIL 在任意的指定时间里,有且只有一个线程在运行——>python是线程安全的
import threading
def test():
print 1
a=threading.Thread(target=test)
a.start()
import threading
def test():
print 1
a=threading.Thread(target=test)
b=threading.Thread(target=test)
a.start()
b.start()
a.join()
b.join()
import threading
import time
def test():
time.sleep(0.001)
print 1
ts=[]
for i in xrange(0,15):
th=threading.Thread(target=test,args=[i])
th.start()
ts.append(th)
for i in ts:
i.join() ##等待线程结束后,继续运行脚本
print "End"
日常推荐使用多进程,而不是多线程。多线程复杂度较高,可维护性差,且只是在使用单个CPU。
一个程序的复杂度,大部分情况下,只和代码行数有关。
在数据库连接池的场景下,可以使用多线程
io操作作用到多线程?必须要lock,acquire,release
互斥锁
加锁 acquire
释放锁 release
加锁一定要释放,不释放成死锁
import threading
mlock=threading.Lock()
num=0
def a():
global num
mlock.acquire()
num+=1
mlock.release()
print num
for i in xrange(0,10):
d=threading.Thread(target=a)
d.start()
rlock 防止死锁
协程
包含yield的函数,则是一个可迭代对象
利用next方法,取每一次yield
send方法
生产者,消费者行为
无需立即执行,需要时才执行
def test():
i=0
a=4
while i<a:
x=yield i
i+=1
t=test()
print t.next()
本文出自 “Gorilla City” 博客,请务必保留此出处http://juispan.blog.51cto.com/943137/1970411
标签:多线程
原文地址:http://juispan.blog.51cto.com/943137/1970411