线程GIL锁 线程队列 回调函数

----------------------------------无法改变风向,可以调整风帆;无法左右天气,可以调整心情。如果事情无法改变,那就去改变观念。

# # ------------------------------------------------------------------------------------------------------------#


# # --------------[线程队列]--------------

# import queue

#先进先出队列
# q = queue.Queue(3) #创建了一个长度为3的队列,也就是说,最多只能放3个数据
#
# q.put(2)
# print('>>>>',q.qsize())
# q.put(5)
# print('>>>>',q.qsize())
# q.put(0)
#
# # q.put(1)
# try:
# q.put_nowait(1)
# except Exception:
# print('队列满了')
# print(q.get())
# print(q.get())
# print(q.get())
# # print(q.get())
# # print(q.get_nowait())

#后进先出,先进后出

# import queue
#
# q = queue.LifoQueue(3)
#
# q.put(1)
# q.put(2)
# q.put(3)
#
# print(q.get())
# print(q.get())
# print(q.get())

# 优先级队列

import queue

q = queue.PriorityQueue(5)

q.put((3,33))

q.put((1,2))
q.put((1,3))
# q.put((1,(3,2)))
# q.put((1,(1,2)))

q.put((2,22))
q.put((4,44))


print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.get())



# # --------------[创建线程池]--------------

import time
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
from multiprocessing import Pool

def func(n):
# print(n)
time.sleep(1)
return n * n

if __name__ == '__main__':
# t_p = ThreadPoolExecutor(max_workers=4)
t_p = ProcessPoolExecutor(max_workers=4)
# p_pool = Pool(4)
res_list = []

for i in range(10):
res = t_p.submit(func,i) #异步提交任务
# print(res.result()) #等待任务的执行结果,拿不到就阻塞,拿到了再运行
res_list.append(res)

t_p.shutdown()

print('主线程结束')

for res1 in res_list:
print(res1.result())

# for i in range(10):
# res = p_pool.apply_async(func,args=(i,))
# # print(res)
# print(res.get())

# # --------------[进程池的map方法]--------------

import time
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
from multiprocessing import Pool

def func(n):
# print(n)
time.sleep(1)
return n * n

if __name__ == '__main__':
t_p = ThreadPoolExecutor(max_workers=4)
# t_p = ProcessPoolExecutor(max_workers=4)
# p_pool = Pool(4)
# res_list = []

res = t_p.map(func,range(10)) #
# print(res)
t_p.shutdown()

print('主线程结束')
for i in res:
print(i)

# print([t1 for t1 in res])
# for i in range(10):
# res = t_p.submit(func,i) #异步提交任务
# # print(res.result()) #等待任务的执行结果,拿不到就阻塞,拿到了再运行
# res_list.append(res)
#
# t_p.shutdown()
#
# print('主线程结束')
#
# for res1 in res_list:
# print(res1.result())

# for i in range(10):
# res = p_pool.apply_async(func,args=(i,))
# # print(res)
# print(res.get())

# # --------------[回调函数]--------------


import time
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
from multiprocessing import Pool

def func(n):
time.sleep(1)
return n * n

def call_back(m):
print('>>>>>',m)
print(m.result())

if __name__ == '__main__':
# t_p = ThreadPoolExecutor(max_workers=4)
t_p = ProcessPoolExecutor(max_workers=4)
p_pool = Pool(4)
res_list = []

res = t_p.submit(func,10).add_done_callback(call_back)

# p_pool.apply_async(func,args=(10,),callback=call_back)
# for i in range(10):
# res = p_pool.apply_async(func,args=(i,))
# # print(res)
# print(res.get())


原文地址:https://www.cnblogs.com/dealdwong2018/p/10058978.html