Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 自定义函数中的python多处理_Python 3.x_Parallel Processing_Python Multiprocessing_Python Multithreading_Task Queue - Fatal编程技术网

Python 3.x 自定义函数中的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

我试图同时生成多个进程,以便在python中实现自定义集群函数。我构建了五个函数,它们基本上实现了网格搜索,需要一些时间才能完成。我已经研究了多重处理,并对代码进行了一些调整,但有两件事我遇到了麻烦。一是,尽管我已经正确地设置了多重处理,但这些过程似乎仍在按顺序进行。第二,我想不出访问多处理进程类返回的值的最佳方法,用返回值更新字典似乎是解决这个问题的好方法。所以我的主要问题是,;我是否正确设置了多处理/多线程?我怎么查

下面的代码是我当前结构的简化版本

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支持正在准备中,但尚未提供。