Python创建一个子进程,不要wai

2024-06-23 19:35:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想运行一系列命令(需要很长时间)。但我不想等待每一个命令的完成。我如何用Python来处理这个问题呢?在

我看着

os.fork()

以及

^{pr2}$

别以为那是我需要的。在

代码

def command1():
   wait(10)

def command2():
   wait(10)

def command3():
   wait(10)

我想打个电话

command1()
command2()
command3()

不用等待。在


Tags: 代码命令osdeffork电话waitcommand1
3条回答

最简单的方法是使用Python自己的multiprocessing

from multiprocessing import Process

def command1():
   wait(10)
...

call1 = Process(target=command1, args=(...))
call1.start()
...

这个模块的引入正是为了减轻控制在同一代码库中访问的函数的外部进程执行的负担当然,这可以通过使用os.fork操作系统,子流程。多处理尽可能模拟Python自己的threadingmoudle接口。使用多处理而不是线程的一个直接优势是,这使得不同的工作进程能够使用不同的CPU核心,实际上是并行工作的——而线程,由于语言设计的限制,实际上一次只限于一个执行工作线程,因此,即使有几个可用的核心,也可以使用单个核心。在

比如说,如果你现在仍然有一些特别的要求,比如说,从网上打电话。请检查几天前的问题答案表: Stop a background process in flask without creating zombie processes

使用python的多处理模块。在

def func(arg1):
    ... do something ...

from multiprocessing import Process
p = Process(target=func, args=(arg1,), name='func')
p.start()

完整的文件在这里:https://docs.python.org/2/library/multiprocessing.html

编辑:

如果您使用的是jpython/cpython发行版,您还可以使用python的线程模块,因为您可以克服这些发行版中的GIL(全局解释器锁)。在

https://docs.python.org/2/library/threading.html

这个例子也许适合你:

#!/usr/bin/env python3

import sys
import os
import time

def forked(fork_func):
    def do_fork():
        pid = os.fork()
        if (pid > 0): 
            fork_func()
            exit(0)
        else:
            return pid
    return do_fork

@forked
def command1():
    time.sleep(2)

@forked
def command2():
    time.sleep(1)

command1()
command2()
print("Hello")

您只需将decorator@forked用于函数。在

只有一个问题:当主程序结束时,它等待子进程的结束。在

相关问题 更多 >

    热门问题