【问题标题】:Python - calling multiprocessing.pool inside a daemonPython - 在守护进程中调用 multiprocessing.pool
【发布时间】:2014-01-07 17:03:59
【问题描述】:

我有一个生成守护进程的Python 脚本。在进程内部,我使用multiprocessing.pool 同时运行14 进程。

当我在守护进程之外运行它时,它可以完美运行(即,当我设置 run_from_debugger=True - 请参阅下面的代码),但如果我通过守护进程运行代码(即 run_from_debugger=False),@ 987654327@ 永远不会被执行。

是否可以在daemon 进程中使用multiprocessing.pool? 我使用Python-daemon 1.6 作为我的守护程序包(如果重要的话)。

代码:

def loop_callback(params):
    #Spawn the process in the pool
    #  Because loop_callback is called many times, often faster than async_function executes,
    #  adding them to a pool allows for parallel execution.
    pool.apply_async(async_function, params)


def run_service():
    # loop is a method that can/will call loop_callback multiple times, and it will call
    #   loop_callback faster than the code in asyc_function executes
    loop(alignment_watch_folder, sleep_duration)


#Class declaration
app = App()

#Declare a pool of processes
#  processes=1 indicates serial execution
pool = Pool(processes=4)

#Either run from a daemon process or not
run_from_debugger = False

#Run the daemon process
if run_from_debugger:
    run_service()
else:
    daemon_runner = runner.DaemonRunner(app)
    daemon_runner.do_action()

任何建议将不胜感激。

【问题讨论】:

    标签: python multiprocessing daemon


    【解决方案1】:

    引用multiprocessing的文档:

    守护进程

    进程的守护进程标志,一个布尔值。这必须在调用 start() 之前设置。

    初始值继承自创建过程。

    当一个进程退出时,它会尝试终止其所有守护进程。

    请注意,不允许守护进程创建子进程。否则守护进程会留下其子进程 如果它在其父进程退出时终止,则成为孤儿。 另外,这些不是 Unix 守护进程或服务,它们是正常的 非守护进程将被终止(而不是加入)的进程 进程已退出。

    由于multiprocessing.Pool 必须创建工作进程,您不能使用它来守护进程。

    【讨论】:

    • 此文档看起来像是针对 Process 方法,而不是针对我的问题的 Pool 方法。 daemonic process is not allowed to create child processes 是否也适用于 Pool
    • @Brett A multiprocessing.Pool 只是一个处理固定数量的multiprocessing.Processes 的对象。事实上,通过一个简单的测试,我得到了一个AssertionError: daemonic processes are not allowed to have children。如果您没有收到此错误,那么还有其他问题。你确定asynch_function 没有被 调用吗?因为python-daemon 库将进程与其终端分离,所以在屏幕上看不到任何内容是正常的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 2014-07-15
    • 1970-01-01
    • 2012-02-15
    • 2011-10-21
    • 2017-02-18
    相关资源
    最近更新 更多