Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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_Subprocess - Fatal编程技术网

Python:可以生成函数或方法吗?

Python:可以生成函数或方法吗?,python,subprocess,Python,Subprocess,我想知道是否有可能使用subprocess模块生成多个进程,以运行在同一脚本中定义的函数或方法(无需导入)。 因此,主脚本不会等待执行完成。就像这样(代码是错误的,但它说明了这个概念): 编辑: 谢谢你的评论!显然,当需要生成内部方法或函数时,需要使用多处理模块。当多处理模块方法pool.map()用于向其调用的函数发送参数变量时,它的行为似乎与“标准”函数截然不同 例子 导入操作系统,系统 来自多处理导入池 def printMe(参数): arg+=“\u已完成” 返回参数 myList=[

我想知道是否有可能使用subprocess模块生成多个进程,以运行在同一脚本中定义的函数或方法(无需导入)。 因此,主脚本不会等待执行完成。就像这样(代码是错误的,但它说明了这个概念):

编辑: 谢谢你的评论!显然,当需要生成内部方法或函数时,需要使用多处理模块。当多处理模块方法pool.map()用于向其调用的函数发送参数变量时,它的行为似乎与“标准”函数截然不同

例子 导入操作系统,系统 来自多处理导入池 def printMe(参数): arg+=“\u已完成” 返回参数 myList=['1','2','3'] 池=池(进程=10) 结果=pool.map(printMe,myList) 打印结果、类型(结果)、长度(结果) #[完成一个、完成两个、完成三个]3的结果 SingleWord=“一次又一次” 池=池(进程=10) 结果=pool.map(printMe,SingleWord) #结果发送至:[“O_完成”、“n_完成”、“c_完成”、“e_完成”、“p_完成”、“O_完成”、“n_完成”、“A_完成”、“A_完成”、“i_完成”、“m_完成”、“e_完成”]16`
这就是为什么
多处理
成为标准库的原因

from multiprocessing import Pool

def run(*args):
    # this is the function to be run
    return sum(*args)

if __name__ == "__main__":
    pool = Pool(processes=10) # 10 processes
    results = pool.map(run, [(1, 1, 1), (2, 2, 2), (3, 3, 3)])
    print(results)
@Spuntnix作为您的更新
pool.map
实际上期望第二个参数是iterable。因此,如果给它一个字符串,它将遍历该字符串并将每个字符作为参数发送


就我个人而言,我希望str不太合适。另请参见:

这就是为什么
多处理
成为标准库的原因

from multiprocessing import Pool

def run(*args):
    # this is the function to be run
    return sum(*args)

if __name__ == "__main__":
    pool = Pool(processes=10) # 10 processes
    results = pool.map(run, [(1, 1, 1), (2, 2, 2), (3, 3, 3)])
    print(results)
@Spuntnix作为您的更新
pool.map
实际上期望第二个参数是iterable。因此,如果给它一个字符串,它将遍历该字符串并将每个字符作为参数发送


就我个人而言,我希望str不太合适。另请参见:

您可以使用多处理,而不必使用池

import multiprocessing

def worker():
    """worker function"""
    print 'Worker'
    return

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker)
        jobs.append(p)
        p.start()

您可以使用多处理,而不必使用池

import multiprocessing

def worker():
    """worker function"""
    print 'Worker'
    return

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker)
        jobs.append(p)
        p.start()

使用模块。不过,您必须注意传递要处理的数据,因此在您的示例中,您必须更改
printMe
。或者使用模块查看此问题。不过,您必须注意传递要处理的数据,因此在您的示例中,您必须更改
printMe
。或者查看此问题谢谢您的澄清!我刚刚测试了pool.map()以在代码中生成一个内部方法(函数)。一切顺利。但执行会暂停(停止、暂停)等待生成的进程完成。我认为生成的主要思想是确保程序不会等待进程完成。@Sputnix使用
pool.map\u async
,如果这是您想要的。是的!map_async正是我所需要的!myProcess=pool.map\u async(myFunction、myArgList、callback=results.append)感谢您的澄清!我刚刚测试了pool.map()以在代码中生成一个内部方法(函数)。一切顺利。但执行会暂停(停止、暂停)等待生成的进程完成。我认为生成的主要思想是确保程序不会等待进程完成。@Sputnix使用
pool.map\u async
,如果这是您想要的。是的!map_async正是我所需要的!myProcess=pool.map\u async(myFunction、myArgList、callback=results.append)