跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 用 ThreadPoolExecutor 时如何同时 submit 和 as_completed?
未分類
21 7 月 2020

用 ThreadPoolExecutor 时如何同时 submit 和 as_completed?

用 ThreadPoolExecutor 时如何同时 submit 和 as_completed?

資深大佬 : Te11UA 5

借用官网例子说明我的疑问:

with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:     # Start the load operations and mark each future with its URL     future_to_url = {executor.submit(load_url, url, 60): url for url in URLS}     for future in concurrent.futures.as_completed(future_to_url):         ... 

官网的例子都是这样,将所有任务一次性放到 executor 后才使用 as_completed 判断。

如果我需要从队列中不断取任务的话,该怎么使用 as_completed 比较合适呢?

# 类似于这个意思 while True:      executor.submit(load_url)      time.sleep(1)  while True:     for future in concurrent.futures.as_completed():         #do sth... 

使用两个线程?感觉在套娃……

或者说 ThreadPoolExecutor 不适用于该场景,需要自己写 threading 方法?

大佬有話說 (2)

  • 資深大佬 : ClericPy

    executor.submit 会生产一个在运行的 Future

    as_completed(futures) 就是一个生成器, 按照 futures 列表完成的顺序往外吐结果, 所以前提是先有这个 futures list 才能按顺序往外摘

    所以, 理论上来说, 你那个情景类似生产者消费者了, 该走的是队列而不是 as_completed

  • 資深大佬 : laike9m

    两个线程没啥问题

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具