<p>这可以通过<a href="https://github.com/ray-project/ray" rel="nofollow noreferrer">Ray</a>来实现,该系统允许您轻松地并行化和分发Python代码。</p>
<p>要并行化示例,需要使用<code>@ray.remote</code>装饰器定义映射函数,然后使用<code>.remote</code>调用它。这将确保远程函数的每个实例都将在不同的进程中执行。</p>
<pre><code>import time
import ray
ray.init()
# Define the function you want to apply map on, as remote function.
@ray.remote
def f(x):
# Do some work...
time.sleep(1)
return x*x
# Define a helper parmap(f, list) function.
# This function executes a copy of f() on each element in "list".
# Each copy of f() runs in a different process.
# Note f.remote(x) returns a future of its result (i.e.,
# an identifier of the result) rather than the result itself.
def parmap(f, list):
return [f.remote(x) for x in list]
# Call parmap() on a list consisting of first 5 integers.
result_ids = parmap(f, range(1, 6))
# Get the results
results = ray.get(result_ids)
print(results)
</code></pre>
<p>这将打印:</p>
<pre><code>[1, 4, 9, 16, 25]
</code></pre>
<p>它将以大约<code>len(list)/p</code>(四舍五入到最近的整数)结束,其中<code>p</code>是您机器上的核心数。假设一台机器有两个内核,我们的示例将在<code>5/2</code>四舍五入(即大约<code>3</code>秒)内执行。</p>
<p>与<a href="https://docs.python.org/2/library/multiprocessing.html" rel="nofollow noreferrer">multiprocessing</a>模块相比,使用Ray有许多优点。尤其是,<strong>同一代码</strong>将在一台机器上以及在一组机器上运行。有关Ray的更多优点,请参见<a href="https://stackoverflow.com/questions/20548628/how-to-do-parallel-programming-in-python/48177988#48177988">this related post</a>。</p>