我希望我的Python脚本能够将其中一个函数作为子进程运行.我该怎么办?
这是我的意图的模拟脚本:
#!/urs/bin/env python
def print_mynumber(foo):
"""This function is obviously more complicated in my script.
It should be run as a subprocess."""
print(foo)
for foo in [1,2,3]:
print_mynumber(foo) # Each call of this function should span a new process.
# subprocess(print_mynumber(foo))
Run Code Online (Sandbox Code Playgroud)
谢谢你的建议.我正确地制定问题并因此进行适当的网络搜索有点困难.
使用多处理模块:
import multiprocessing as mp
def print_mynumber(foo):
"""This function is obviously more complicated in my script.
It should be run as a subprocess."""
print(foo)
if __name__ == '__main__':
for foo in [1,2,3]:
proc = mp.Process(target = print_mynumber, args = (foo, ))
proc.start()
Run Code Online (Sandbox Code Playgroud)
您可能不希望为每次调用创建一个进程print_mynumber,特别是如果列表foo迭代很长.在这种情况下,更好的方法是使用多处理池:
import multiprocessing as mp
def print_mynumber(foo):
"""This function is obviously more complicated in my script.
It should be run as a subprocess."""
print(foo)
if __name__ == '__main__':
pool = mp.Pool()
pool.map(print_mynumber, [1,2,3])
Run Code Online (Sandbox Code Playgroud)
默认情况下,池将创建N个工作进程,其中N是计算机拥有的cpus(或核心)数.pool.map其行为与Python内置map命令非常相似,只是它将任务分配给工作池.