python 期物

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 期物相关的知识,希望对你有一定的参考价值。

参考技术A 期物(Future)是concurrent.futures模块和asyncio包的重要组件。
python3.4之后标准库中有两个名为Future的类:concurrent.futures.Future和asyncio.Future.
这两个类的作用相同:类的实例都表示可能已经完成活着尚未完成的延迟计算。与JS库中的Promise对象,Tornado框架中的Future类类似。
通常我们自己不应该创建期物,而只能由并发框架实例化。

这个例子中的future.result方法不会阻塞,因为future对象是有as_completed方法产生的。

在asyncio包中,BaseEventLoop.create_task(...)方法接收一个协程,排定他的运行时间,然后返回一个asyncio.Task实例(也是asyncio.Future类的实例),因为Task是Future的子类,用于包装协程。这与Executor.submit(...)方法创建concurrent.futures.Future实例是一个道理。
因为asyncio.Future类的目的是与yield from一起使用,所以通常不需用使用以下方法:

asyncio.async(coro_or_future, *, loop=None)
  这个函数统一了协程和期物:第一个参数可以是二者中的任何一个。如果是 Future或 Task 对象,那就原封不动地返回。如果是协程,那么 async 函数会调用loop.create_task(...) 方法创建 Task 对象。loop= 关键字参数是可选的,用于传入事件循环;如果没有传入,那么 async 函数会通过调用 asyncio.get_event_loop() 函数获取循环对象.

不过,在asyncio 中,基本的流程是一样的:在一个单线程程序中使用主循环依次激活队列里的协程。各个协程向前执行几步,然后把控制权让给主循环,主循环再激活队列里的下一个协程。

asyncio.wait(...) 协程的参数是一个由期物或者协程构成的可迭代对象。wait会分别把各个协程包装进入一个Task对象。最后的结果是,wait处理的所有对象都通过某种方法变成Future实例。wait是协程函数,因此返回的是一个协程或者生成器对象。为了驱动协程,我们把协程传给loop.run_until_complete(...)方法。

蓝桥ROS机器人之现代C++学习笔记7.3 期物

学习了如下程序:

// future example
#include <iostream>       // std::cout
#include <future>         // std::async, std::future
#include <chrono>         // std::chrono::milliseconds

// a non-optimized way of checking for prime numbers:
bool is_prime (int x) 
  for (int i=2; i<x; ++i) if (x%i==0) return false;
  return true;


int main ()

  // call function asynchronously:
  std::future<bool> fut = std::async (is_prime,444444443); 

  // do something while waiting for function to set future:
  std::cout << "checking, please wait";
  std::chrono::milliseconds span (100);
  while (fut.wait_for(span)==std::future_status::timeout)
    std::cout << '.' << std::flush;

  bool x = fut.get();     // retrieve return value

  std::cout << "\\n444444443 " << (x?"is":"is not") << " prime.\\n";

  return 0;


#include <iostream>
#include <thread>
#include <future>

int main() 
    // pack a lambda expression that returns 7 into a std::packaged_task
    std::packaged_task<int()> task([]()return 7;);
    // get the future of task
    std::future<int> result = task.get_future();    // run task in a thread
    std::thread(std::move(task)).detach();
    std::cout << "waiting...";
    result.wait(); // block until future has arrived
    // output result
    std::cout << "done!" << std:: endl << "future result is " << result.get() << std::endl;
    return 0;

(⊙﹏⊙)

 

(⊙﹏⊙)


 

 

 

 

 

以上是关于python 期物的主要内容,如果未能解决你的问题,请参考以下文章

流畅的python第十七章使用期物处理并发

python3.5+ asyncio await异步详解

python pandas使用chunksize异步拆分固定行数的文件

蓝桥ROS机器人之现代C++学习笔记7.3 期物

代写python,代写python编程,python代写,python编程代写,留学生python代写

001--python全栈--基础知识--python安装