Joh*_*ohn 39 python parallel-processing multithreading
我试图让2个函数同时运行.
def func1():
print 'Working'
def func2():
print 'Working'
func1()
func2()
Run Code Online (Sandbox Code Playgroud)
有谁知道如何做到这一点?
chr*_*ley 68
做这个:
from threading import Thread
def func1():
print 'Working'
def func2():
print 'Working'
if __name__ == '__main__':
Thread(target = func1).start()
Thread(target = func2).start()
Run Code Online (Sandbox Code Playgroud)
这可以通过Ray优雅地完成,这是一个允许您轻松并行化和分发 Python 代码的系统。
要并行化您的示例,您需要使用 定义函数@ray.remote decorator,然后使用 调用它们.remote。
import ray
ray.init()
# Define functions you want to execute in parallel using
# the ray.remote decorator.
@ray.remote
def func1():
print("Working")
@ray.remote
def func2():
print("Working")
# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])
Run Code Online (Sandbox Code Playgroud)
如果func1()和func2()返回结果,则需要稍微重写上面的代码,替换ray.get([func1.remote(), func2.remote()])为:
ret_id1 = func1.remote()
ret_id2 = func1.remote()
ret1, ret2 = ray.get([ret_id1, ret_id2])
Run Code Online (Sandbox Code Playgroud)
与多处理模块或使用多线程相比,使用 Ray 有许多优点。特别是,相同的代码将在单台机器和机器集群上运行。
有关 Ray 的更多优势,请参阅此相关帖子。
一个选项,看起来像它使运行两个功能在同一
时间,使用threading(例如在模块这个答案)。
但是,正如“官方Python文档”
页面所描述的那样,它的延迟很小。尝试使用的更好的模块是multiprocessing。
另外,还有其他Python模块可用于异步执行(两个代码同时工作)。有关它们的一些信息并有助于选择它们,您可以阅读此堆栈溢出问题。
threading模块的评论他可能想知道,由于全局解释器锁定
,即使有
问题的计算机具有多个CPU,它们也不会在同一时间执行。wiki.python.org/moin/GlobalInterpreterLock
–乔纳斯·埃夫斯特伦(JonasElfström),2010年6月2日,11:39
threading模块不起作用的信息CPython实现细节:在CPython中,由于使用了全局解释器
锁,因此只有一个线程可以一次执行Python代码(即使
某些面向性能的库可能克服了此限制)。如果希望您的应用程序更好地利用多核计算机的计算资源,建议您使用multiprocessing或current.futures.ProcessPoolExecutor。
但是,如果您
要同时运行多个I / O绑定任务,则线程化仍然是合适的模型。
| 归档时间: |
|
| 查看次数: |
96895 次 |
| 最近记录: |