Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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,多处理库问题_Python_Multithreading_Function_Multiprocessing_Main - Fatal编程技术网

Python,多处理库问题

Python,多处理库问题,python,multithreading,function,multiprocessing,main,Python,Multithreading,Function,Multiprocessing,Main,我有一个程序,在这个程序中,我想为几个参数并行运行其中一个函数 该程序采用以下格式: import statements def function1(): do something def function2() do something def main(): function1() 我在网上找到了几个如何使用多处理库的示例,例如下面的通用模板 import multiprocessing def worker(num): print 'Wo

我有一个程序,在这个程序中,我想为几个参数并行运行其中一个函数

该程序采用以下格式:

import statements 

def function1():
     do something

def function2()
     do something

def main():

     function1()
我在网上找到了几个如何使用
多处理
库的示例,例如下面的通用模板

import multiprocessing

def worker(num):
    print 'Worker:', num
    return

if __name__ == '__main__':
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        p.start()
据我所知,
worker()
是一个并行执行的函数。但我不知道在哪里或如何使用该软件 (
如果uuuu name_uuuu=='\uuuuu main_uuu':
)阻止代码

到目前为止,该块位于我的
main()
中,当我运行该程序时,我不会多次执行辅助函数,而是多次执行我的main


那么(
如果
将你提供的两个示例混合在一起,它会是这样的:

import multiprocessing

def worker(num):
    print 'Worker:', num
    return

def main():

    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        p.start()
        p.join()

if __name__ == '__main__':
     main()
function1
替换
worker
,即您希望并行化的功能

关键部分是调用
if uuu name uuu='uuu main uu':
块中的
main
函数,但是在这个简单的示例中,您可以很容易地将代码直接放在
if uuu name uu='uuu main:
下的

如果你永远都不打算从这个文件中导入任何东西,你甚至不需要
If\uuuuuu name\uuuuu=='\uuuuuuu main\uuuuu':
part;仅当您希望能够在不运行
main()
中的代码的情况下将此脚本中的函数导入其他脚本/交互式会话时,才需要此选项。看

因此,最简单的用法是:

import multiprocessing

def worker(num):
    print 'Worker:', num
    return

for i in range(5):
    p = multiprocessing.Process(target=worker, args=(i,))
    p.start()
    p.join()
编辑:多处理池示例

import multiprocessing

def worker(num):
    #print 'Worker:', num
    return num

pool = multiprocessing.Pool(multiprocessing.cpu_count())

result = pool.imap(worker, range(5))

print list(result)
印刷品:

[0, 1, 2, 3, 4]

有关更多详细说明,请参见。

将并行化逻辑(对
多处理
的调用)放入
函数中。然后,从
中调用
main
,如果需要显示正在运行的实际代码,则。由于您显示的代码中没有任何内容调用您的
main()
函数,因此我们无法猜测调用它的原因。但是,如果您按照第二个发布的模板进行操作,您的代码将正常工作。当我运行第一个版本时,它正常工作,但它没有给我预期的输出,即worker:0、worker:1、worker:2。。。相反,每次我运行它时,顺序都会变化,有时是(1,2,0,4,3)或(0,3,2,1,4)也是您提供的第二个版本,但没有if name=='main':在我尝试它时永远运行顺序会变化,因为
多处理
将对
工作者
的每个调用拆分为跨多个核的单独进程,不考虑调用、完成和返回过程的顺序。结果按完成的顺序返回,而不是按调用的顺序返回。如果要保留顺序,请查看
多处理.pool
apply\u async
imap
。对于第二个版本,如果它不在功能块中,则可能需要
.join()
。看见