python - 多处理多个执行器等待每个作业
问题描述
我有 2 个任务 - load_url 和 some_job。需要同时提交并使用 python 执行器...
看起来执行程序没有启动 - some_job - 直到它完成 load_url。
当我运行此作业时 - some_job 仅在 load_url 过程完成后启动。
import sys
from concurrent import futures
import urllib.request
import multiprocessing
import time
URLS = ['http://www.foxnews.com/',
'http://www.cnn.com/',
'http://europe.wsj.com/',
'http://www.bbc.co.uk/',
'http://some-made-up-domain.com/']
def load_url(url, e, timeout=0):
# it will take 10 seconds to process a URL
time.sleep(10)
return None
def some_job(url, e, timeout=0):
print('some_job')
time.sleep(10)
return None
def check_futures(livefutures):
runningfutures = True
while runningfutures:
runningfutures = [f for f in livefutures if f.running()]
print('runningfutures=', runningfutures)
def main():
print('start')
manager = multiprocessing.Manager()
e = manager.Event()
t = '1'
with futures.ProcessPoolExecutor(max_workers=5) as executor:
livefutures = dict(
(executor.submit(load_url, url, e), url)
for url in URLS)
test = executor.submit(some_job, t, e)
print('check_futures')
# runningfutures = True
check_futures(livefutures)
if __name__ == '__main__':
main()
解决方案
推荐阅读
- google-apps-script - 如何使功能自动化?
- node.js - 子进程以 SIGTERM 退出(可能是由于超出了 maxBuffer);我如何确认这是缓冲区问题并修复它?
- java - Admob 广告未显示
- python - 如何从 github 安装 longformer 库
- python - 有没有办法解决geopandas的这个导入错误?
- swift - Swiftui 通知时间间隔至少 60
- android - 使用 OkHttp 在 Kotlin 中发送和接收网络请求
- php - 为什么一种方法会产生注意:未定义的索引:
- .net - 如何使用 BindingSource 显示更新的值(来自另一个 Windows 窗体或工作站的更改)
- swift - 以编程方式向 UIStackView 添加更多标签