1.setdeamon 当主程序执行完时,子程序自动被销毁 ,内存自动被收回

 

例一:

import threading, time

def run(n):
print('run %s'%n)
time.sleep(1)
print('task %s'%n)


t_objs = []

for i in range(10):
m = threading.Thread(target=run, args=(i,))
m.setDaemon(True) #把m子进程设置为守护线程
m.start()
t_objs.append(m)

#for t in t_objs:
# t.join()

结果并不会输出 time.sleep(1) 后面的东西,因为直接就跳过了,


例二:

线程之间的相互调用
import threading, time

def run(n):
print('task run%s'%n)
time.sleep(1.8)
print('run %s'%n)


def main():
for i in range(5):
m = threading.Thread(target=run,args=(i,))
m.start()
m.join(1) #等待第一个m执行一秒钟,一秒钟以后继续循环


my_thread = threading.Thread(target=main,args=())

my_thread.setDaemon(True) #设置为守护程序
my_thread.start()



my_thread.join(timeout=2)


2.lock 线程锁

lock 可以保证每次调用时,内部数据只被一个线程操作,保证了不会被重复赋值

例一
import threading

def add_number():
lock.acquire()
global number
number += 1
lock.release()


number = 0
lock = threading.Lock()
m_objs = []
for i in range(10):
m = threading.Thread(target=add_number, args=())
m.start()
m_objs.append(m)


for m in m_objs:
m.join()

print(number)

3.threading.BoundedSemaphore 也是一种锁 输出多个线程的结果

例一

import threading, time

def run(n):
semaphore.acquire()
print('task run %s'%n)
time.sleep(1)
semaphore.release()


if __name__ == '__main__':
semaphore = threading.BoundedSemaphore(5)
for i in range(22):
m = threading.Thread(target=run, args=(i,))
m.start()


4.递归锁 一个大锁里存在着一把小锁

例一:

import threading, time

def run_1():
rock.acquire()
print('run_1')
rock.release()

def run_2():
rock.acquire()
print('run_2')
rock.release()

def run():
rock.acquire()
run_1()
time.sleep(1)
run_2()
rock.release()

if __name__ == '__main__':

rock = threading.RLock()

m = threading.Thread(target=run,args=())
m.start()









posted on 2018-06-04 13:30  python我的最爱  阅读(293)  评论(0编辑  收藏  举报