python的异步工具
asynctools的Python项目详细描述
异步工具
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()