本篇文章主要介绍了"python多线程 Python(八)进程、线程、协程篇",主要涉及到python多线程方面的内容,对于Pythonjrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
本章内容:线程(线程锁、threading.Event、queue 队列、生产者消费者模型、自定义线程池)进程(数据共享、进程池)协程线程Threading用于...
from multiprocessing import Pool
import time
def myFun(i):
time.sleep(2)
return i+100
def end_call(arg):
print("end_call",arg)
p = Pool(5)
# print(p.map(myFun,range(10)))
for i in range(10):
p.apply_async(func=myFun,args=(i,),callback=end_call)
print("end")
p.close()
p.join()


from multiprocessing import Pool, TimeoutError
import time
import os
def f(x):
return x*x
if__name__ == '__main__':
# 创建4个进程 with Pool(processes=4) as pool:
# 打印 "[0, 1, 4,..., 81]" print(pool.map(f, range(10)))
# 使用任意顺序输出相同的数字, for i in pool.imap_unordered(f, range(10)):
print(i)
# 异步执行"f(20)" res = pool.apply_async(f, (20,)) # 只运行一个进程 print(res.get(timeout=1)) # 输出 "400" # 异步执行 "os.getpid()" res = pool.apply_async(os.getpid, ()) # 只运行一个进程 print(res.get(timeout=1)) # 输出进程的 PID # 运行多个异步执行可能会使用多个进程 multiple_results = [pool.apply_async(os.getpid, ()) for i in range(4)]
print([res.get(timeout=1) for res in multiple_results])
# 是一个进程睡10秒 res = pool.apply_async(time.sleep, (10,))
try:
print(res.get(timeout=1))
except TimeoutError:
print("发现一个 multiprocessing.TimeoutError异常")
print("目前,池中还有其他的工作")
# 退出with块中已经停止的池 print("Now the pool is closed and no longer available")
官方示例 协程又叫微线程,从技术的角度来说,“协程就是你可以暂停执行的函数”。如果你把它理解成“就像生成器一样”,那么你就想对了。 线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员。
协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代码块执行顺序。
协程的适用场景:当程序中存在大量不需要CPU的操作时(IO),适用于协程。
# 安装
pip install gevent
# 导入模块
import gevent
greenlet
# greenlet
from greenlet import greenlet
def test1():
print(11)
gr2.switch()
print(22)
gr2.switch()
def test2():
print(33)
gr1.switch()
print(44)
gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch()
# 输出结果:
11
33
22
44
gevent