2024-06-23 19:35:38 发布
网友
我想运行一系列命令(需要很长时间)。但我不想等待每一个命令的完成。我如何用Python来处理这个问题呢?在
我看着
os.fork()
以及
别以为那是我需要的。在
代码
def command1(): wait(10) def command2(): wait(10) def command3(): wait(10)
我想打个电话
command1() command2() command3()
不用等待。在
最简单的方法是使用Python自己的multiprocessing:
from multiprocessing import Process def command1(): wait(10) ... call1 = Process(target=command1, args=(...)) call1.start() ...
这个模块的引入正是为了减轻控制在同一代码库中访问的函数的外部进程执行的负担当然,这可以通过使用os.fork操作系统,子流程。多处理尽可能模拟Python自己的threadingmoudle接口。使用多处理而不是线程的一个直接优势是,这使得不同的工作进程能够使用不同的CPU核心,实际上是并行工作的——而线程,由于语言设计的限制,实际上一次只限于一个执行工作线程,因此,即使有几个可用的核心,也可以使用单个核心。在
threading
比如说,如果你现在仍然有一些特别的要求,比如说,从网上打电话。请检查几天前的问题答案表: 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用于函数。在
@forked
只有一个问题:当主程序结束时,它等待子进程的结束。在
最简单的方法是使用Python自己的multiprocessing:
这个模块的引入正是为了减轻控制在同一代码库中访问的函数的外部进程执行的负担当然,这可以通过使用os.fork操作系统,子流程。多处理尽可能模拟Python自己的
threading
moudle接口。使用多处理而不是线程的一个直接优势是,这使得不同的工作进程能够使用不同的CPU核心,实际上是并行工作的——而线程,由于语言设计的限制,实际上一次只限于一个执行工作线程,因此,即使有几个可用的核心,也可以使用单个核心。在比如说,如果你现在仍然有一些特别的要求,比如说,从网上打电话。请检查几天前的问题答案表: Stop a background process in flask without creating zombie processes
使用python的多处理模块。在
完整的文件在这里:https://docs.python.org/2/library/multiprocessing.html
编辑:
如果您使用的是jpython/cpython发行版,您还可以使用python的线程模块,因为您可以克服这些发行版中的GIL(全局解释器锁)。在
https://docs.python.org/2/library/threading.html
这个例子也许适合你:
您只需将decorator
@forked
用于函数。在只有一个问题:当主程序结束时,它等待子进程的结束。在
相关问题 更多 >
编程相关推荐