python - 如何让函数在 Python 中作为子进程运行?

标签 python subprocess

我希望我的 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))

感谢您的建议。正确地表述问题,从而进行适当的网络搜索对我来说有点困难。

最佳答案

使用 multiprocessing module :

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()

您可能不希望为每次调用 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])

默认情况下,池将创建 N 个工作进程,其中 N 是机器拥有的 cpus(或核心)数。 pool.map 的行为很像 Python 内置的 map 命令,除了它将任务分包给工作池。

关于python - 如何让函数在 Python 中作为子进程运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12811349/

相关文章:

python - 代码优化python

python - 如何从 subprocess.Popen.stdout 读取所有可用数据(非阻塞)?

python - 如何使用 asyncio 和 concurrent.futures.ProcessPoolExecutor 在 Python 中终止长时间运行的计算(CPU 绑定(bind)任务)?

python - subprocess.call 命令中的变量在运行时无法在命令行上识别,特别是文件

python - IPython3 自动配置 %matplotlib inline

python - Django FileField 未使用 SimpleUploadedFile 对象进行验证

python - 如何在 Python 中使用 dir/s 命令?

python - 从多个 shell 子进程中非阻塞实时读取 (Python)

python - 在 Redis 中删除一个键的多个字段

python - 如何智能地将 DRY 原则应用到 tkinter OptionMenu 中?