文化传媒网站php源码,郑州官网网络营销外包,wordpress新手入门,网站建设 主机托管Python的并发程序可以使用multiprocessing库、threading库、asyncio库、concurrent.futures库以及selectors库等等协助编写#xff1a;multiprocessing库可以创建多个进程#xff0c;由系统协调调度各个任务#xff1b;threading库则是创建多个线程#xff0c;由Python解释…Python的并发程序可以使用multiprocessing库、threading库、asyncio库、concurrent.futures库以及selectors库等等协助编写multiprocessing库可以创建多个进程由系统协调调度各个任务threading库则是创建多个线程由Python解释器在一条进程内并发执行任务始终只占用一个CPU核心资源会遇到臭名昭著的GIL问题asyncio库则是将任务中的IO密集部分单拎出来系统可以在等待IO密集部分返回的同时多次执行计算密集代码所有任务都在一条线程内执行concurrent.futures库可以用来创建线程池或进程池更适合编写粒度较细的并发任务代码。selectors库是对select库的高级封装而后者则是对Unix的select、poll、Linux的epoll、BSD的Kqueue等等IO复用方法的低级封装库。multiprocessing库、threading库、asyncio库的有着类似的同步条件Lock、RLock、Condition、Semaphore、Barrier、Event等Lock、RLock较为类似可以用来将一组操作原子化。RLock的特殊之处在于可以被同一条线程递归调用当然用完之后也得递归解锁。Condition可以保证多组线程阻塞在同一位置等候其他线程的通知防止因为资源为空时发生错误。Semaphore用于确保不会有过多线程同时访问某一资源。Barrier则用于保证所有线程各自在某一位置阻塞当所有线程都阻塞时又各自开始执行下一条指令。Event较为简单一条线程可能阻塞等候event对象被另一条线程设置为true。线程的好处是有共享的内存空间方便线程间的交流。而进程则需要特殊的机制。multiprocessing库提供了queue和pipe两种机制用于进程间交流。这两类的不同之处在于queue的内容可以被所有进程访问到pipe只能被两个进程访问到信息的安全程度较高。multiprocessing库还可以使用Manager对象为各个进程提供共享内存空间。此外Python为线程提供了queue.Queue和collections.deque满足线程的交流需求。后者的入队出队操作都是线程安全的。而asyncio库有自己的queue类可以用于协程间的交流。asyncio库的使用方法与前两者区别较大。当调用async def定义协程函数时内部使用await等候另一个协程函数返回。使用asyncio协程库需要清晰的区分出IO密集操作和计算密集操作也就是手动调度并发任务。多线程库则依靠解释器自动调度并发任务。asyncio库使用方法较为复杂更多内容请看官方文档——18.5. asyncio – Asynchronous I/O, event loop, coroutines and tasks¶。concurrent.futures库可以使用with语句来并发执行粒度较细的并发任务也可以使用submit()方法来单独执行一个函数返回一个future对象。future可以用于对对应任务的撤销、结果传递、回调函数设置、异常分析等等操作。