Python 3.x 自定义函数中的python多处理
我试图同时生成多个进程,以便在python中实现自定义集群函数。我构建了五个函数,它们基本上实现了网格搜索,需要一些时间才能完成。我已经研究了多重处理,并对代码进行了一些调整,但有两件事我遇到了麻烦。一是,尽管我已经正确地设置了多重处理,但这些过程似乎仍在按顺序进行。第二,我想不出访问多处理进程类返回的值的最佳方法,用返回值更新字典似乎是解决这个问题的好方法。所以我的主要问题是,;我是否正确设置了多处理/多线程?我怎么查 下面的代码是我当前结构的简化版本Python 3.x 自定义函数中的python多处理,python-3.x,parallel-processing,python-multiprocessing,python-multithreading,task-queue,Python 3.x,Parallel Processing,Python Multiprocessing,Python Multithreading,Task Queue,我试图同时生成多个进程,以便在python中实现自定义集群函数。我构建了五个函数,它们基本上实现了网格搜索,需要一些时间才能完成。我已经研究了多重处理,并对代码进行了一些调整,但有两件事我遇到了麻烦。一是,尽管我已经正确地设置了多重处理,但这些过程似乎仍在按顺序进行。第二,我想不出访问多处理进程类返回的值的最佳方法,用返回值更新字典似乎是解决这个问题的好方法。所以我的主要问题是,;我是否正确设置了多处理/多线程?我怎么查 下面的代码是我当前结构的简化版本 def Optimal_Search(b
def Optimal_Search(brc = "brc", ms='ms', agg = 'agg', db = 'db', km = 'km'):
import time
start_time = time.time()
def f(name):
print ('hello', name)
return ('hello', name)
if __name__=='__main__':
brc_params = Process(target = f(name = brc))
brc_params.start()
ms_params = Process(target = f(name = ms))
ms_params.start()
agg_params = Process(target = f(name = agg))
agg_params.start()
db_params = Process(target = f(name = db))
db_params.start()
km_params = Process(target = f(name = km))
km_params.start()
print("--- %s seconds ---" % (time.time() - start_time))
print(brc_params, ms_params, agg_params, db_params, km_params)
return brc_params, ms_params, agg_params, db_params, km_params
如果您想使用,我认为您需要将
进程(target=f('brc'))
替换为p=Process(target=f,args=('brc',)
。否则,f
将在传递到过程之前进行评估
但是,听起来您希望在集群上运行此功能,在这种情况下,多处理将不起作用。我建议用编写代码,这样它就可以在一台机器和一个集群上运行
您可以按如下方式构造它
import ray
import sys
ray.init()
@ray.remote
def f(name):
print('hello', name)
sys.stdout.flush()
return 'hello', name
# Launch the tasks in parallel on different worker processes.
result_ids = []
for name in ['brc', 'ms', 'agg', 'db', 'km']:
result_ids.append(f.remote(name))
# Retrieve the results.
results = ray.get(result_ids)
请注意,如果您正在进行网格搜索或任何形式的超参数搜索,您可能会发现这很有用
。请注意,我正在帮助开发Ray。我感谢您的建议。看起来Ray只适用于Linux和MAC,不幸的是我使用的是WIndows操作系统。啊,你说得对。目前Ray在Linux和MacOS上工作。Windows支持正在准备中,但尚未提供。