ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 低调看直播体育app软件下载 >> Pythonjrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播 >> python多线程 Python(八)进程、线程、协程篇

python多线程 Python(八)进程、线程、协程篇(5/6)

来源:网络整理     时间:2016-06-27     关键词:python多线程

本篇文章主要介绍了"python多线程 Python(八)进程、线程、协程篇",主要涉及到python多线程方面的内容,对于Pythonjrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下: 本章内容:线程(线程锁、threading.Event、queue 队列、生产者消费者模型、自定义线程池)进程(数据共享、进程池)协程线程Threading用于...

  • apply
  • apply_async

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()

 Python(八)进程、线程、协程篇 Python(八)进程、线程、协程篇

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

python多线程相关图片

python多线程相关文章