【发布时间】:2019-03-19 04:35:17
【问题描述】:
说我有 scrapper_1.py、scrapper_2.py、scrapper_3.py。
我现在运行它的方式是从 pycharm 单独运行/执行,这样我可以在任务管理器中看到 3 python.exe 正在执行。
现在我正在尝试编写一个主脚本,比如 scrapper_runner.py ,将这个抓取器作为模块导入并并行而不是顺序地运行它们。
我从各种 SO 帖子中尝试了子进程、多处理甚至 os.system 的示例……但没有任何运气……从日志中它们都按顺序运行,从任务管理器中我只看到一个 python.exe 执行。
这种流程的模式正确吗?
EDIT:1(尝试使用 concurrent.futures ProcessPoolExecutor)它按顺序运行。
from concurrent.futures import ProcessPoolExecutor
import scrapers.scraper_1 as scraper_1
import scrapers.scraper_2 as scraper_2
import scrapers.scraper_3 as scraper_3
## Calling method runner on each scrapper_x to kick off processes
runners_list = [scraper_1.runner(), scraper_1.runner(), scraper_3.runner()]
if __name__ == "__main__":
with ProcessPoolExecutor(max_workers=10) as executor:
for runner in runners_list:
future = executor.submit(runner)
print(future.result())
【问题讨论】:
-
请展示您的测试代码。多个进程可以在任务管理器中组合在一起,因此请确保您不会在那里错过它们。
-
@JohanL 添加了编辑 1,包括我对 comcurrent.futures 的尝试
标签: python subprocess python-multiprocessing python-multithreading python-module