setdeamon 设置 线程为守护线程, lock 加入线程锁

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)







猜你喜欢

转载自www.cnblogs.com/my-love-is-python/p/9132868.html