python的异步工具

asynctools的Python项目详细描述


Build StatusPythons

异步工具

python的异步工具。

目录

穿线

线程是最简单的事情,但是由于GIL它对计算没有用处。 仅当要并行访问阻塞资源(如网络)时使用。

异步

来源:asynctools/threading/Async.py

应该在单独线程中运行的函数的装饰器。 当函数被调用时,它返回一个^{}

fromasynctools.threadingimportAsync@Asyncdefrequest(url):# ... do requestrequest('http://example.com')# Async requestrequest('http://example.com').wait()# wait for it to complete

如果要等待多个线程完成,请参阅下一章。

平行

来源:asynctools/threading/Parallel.py

并行执行函数并收集结果。 每个函数在自己的线程中执行,所有线程立即退出。

方法:

  • __call__(*args, **kwargs):添加作业。调用Parallel对象,以便它使用相同的参数调用worker函数

  • map(jobs):为每个参数调用工作者的方便方法

  • first(timeout=None):等待单个结果可用,可选超时(秒)。结果一准备好就返回。 如果所有线程都因错误而失败,则返回None

  • join():等待所有任务完成,并返回两个列表:

    • 结果列表
    • 异常列表

示例:

fromasynctools.threadingimportParalleldefrequest(url):# ... do requestreturndata# Executepll=Parallel(request)forurlinlinks:pll(url)# Starts a new thread# Wait for the resultsresults,errors=pll.join()

由于请求方法只接受一个参数,因此可以链接:

results,errors=Parallel(request).map(links).join()

游泳池

来源:asynctools/threading/Pool.py

创建一个线程池并在其中执行工作。 如果您确实希望启动有限数量的长生存线程,则此选项非常有用。

方法与^{}相同,还添加了一些:

  • __call__(*args, **kwargs)
  • map(jobs)
  • first(timeout=None)
  • close():终止所有线程。关闭时池不再可用。
  • __enter____exit__上下文管理器与with语句一起使用

示例:

fromasynctools.threadingimportPooldefrequest(url):# ... do long requestreturndata# Make poolpool=Pool(request,5)# Assign some jobforurlinlinks:pll(url)# Runs in a pool# Wait for the resultsresults,errors=pll.join()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java WebClient请求级别超时抛出名为default onErrorDropped的运算符   java JAXB外部绑定文件错误   Freemarker中的java转义宏参数值   java正在同步来自不同对象{已编辑}的线程   java如何在另一个类上更新活动中的元素   java Hibernate连接查询   java可以使用Apache Crunch创建类似于图形的数据结构吗?   java在JLabel的开头加上3个点   java 安卓应用程序显示线程错误   java@RequestBody在Spring中总是空的   java Android异步任务永远不会结束   具有多个属性的java Jaxws枚举   java中的安卓 Stripe InvalidRequestException   多线程java。util。非多线程程序中的ConcurrentModificationException   Minecraft Java插件如何删除HashMap中存储的所有块   空Java字符串的大小   从AJP连接器请求检索Shibboleth属性的java   oracle11g将Java类文件加载到Oracle数据库