【发布时间】:2016-11-25 10:09:07
【问题描述】:
我是python多线程/多处理的新手,所以请多多包涵。 我想解决以下问题,在这方面我需要一些帮助/建议。 让我简单描述一下:
我想启动一个 python 脚本,它在 按顺序开始。
-
顺序部分结束后,我想开始一些工作 并行。
- 假设我要启动四个并行作业。
- 我还想在计算集群上使用“lsf”在其他一些机器上启动这些作业。我的初始脚本也在“lsf”上运行 机器。
- 我在四台机器上开始的四个作业将依次执行两个逻辑步骤 A 和 B。
- 当作业最初开始时,它们会从逻辑步骤 A 开始并完成它。
- 在每个作业(4 个作业)完成步骤 A 之后;他们应该通知启动这些的第一个工作。也就是说,启动的主要作业就是等待这四个作业的确认。
- 一旦主作业收到这四个作业的确认;它应该通知所有四个作业执行逻辑步骤 B。
- 逻辑步骤 B 将在完成任务后自动终止作业。
- 主要作业正在等待所有作业完成,稍后应继续执行后续部分。
-
一个示例场景是:
- 在集群中的“lsf”机器上运行的 Python 脚本会在四个“lsf”机器上启动四个“tcl shell”。
- 在每个 tcl shell 中,都有一个脚本用于执行逻辑步骤 A。
- 一旦步骤 A 完成,他们应该以某种方式通知正在等待确认的 python 脚本。
- 一旦收到四个人的确认,python 脚本就会通知他们执行逻辑步骤 B。
- 逻辑步骤 B 也是一个脚本,来源于他们的 tcl shell;这个脚本最后也会关闭 tcl shell。
- 同时,python 脚本正在等待所有四个作业完成。
- 四个作业都完成后;它应该再次继续顺序部分并稍后完成。
这是我的问题:
我很困惑——我应该使用多线程/多处理。哪个更适合? 其实这两者有什么区别?我阅读了这些内容,但无法得出结论。
什么是 Python GIL?我还在任何时间点的某个地方读到,只有一个线程会执行。 我在这里需要一些解释。它给我的印象是我不能使用线程。
关于如何系统地以更 Python 的方式解决我的问题的任何建议。 我正在寻找一些逐步的口头解释和一些关于每一步的阅读指南。 一旦概念清楚,我想自己编写代码。
提前致谢。
【问题讨论】:
-
看看celery。它应该在这里解决您的大部分/所有查询。
标签: python multithreading python-2.7 multiprocessing