码迷,mamicode.com
首页 > 编程语言 > 详细

多线程

时间:2017-10-05 12:13:04      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:多线程

进程 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!