从主进程

时间:2016-01-16 00:04:14

标签: linux python-3.x multiprocessing

我有一个Python 3脚本,其中包括使用某些命令行参数启动Chrome。代码的相关部分如下所示:

import multiprocessing as mp
from subprocess import call
import time
import logging

def launch_tab(datadir, url):
    # Constructs the command line and launches Chrome via subprocess.call()

def open_browser(urls):
    '''Arranges for Chrome to be launched in a subprocess with the specified
    URLs, using the already-configured profile directory.

    urls: a list of URLs to be loaded one at a time.'''
    first_run = True
    for tab in urls:
        logging.debug('open_browser: {}'.format(tab))
        proc = mp.Process(name=tab, target=launch_tab, args=(config.chromedir, tab))
        proc.start()
        if first_run:
            first_run = False
            time.sleep(10)
        else:
            time.sleep(0.5)

发生了什么

  • 当我运行已按照脚本启动的Chrome运行脚本时:
    1. Chrome按预期启动,发现它已在运行,按照命令行上提供的说明操作,然后终止在命令行上启动的进程。
    2. 由于该进程现已终止,我的脚本也会终止。这就是我想要的行为。
  • 在Chrome未运行时运行脚本时:
    1. Chrome认为它尚未运行,因此不会终止命令行启动的进程。
    2. 由于该流程尚未终止,因此我的脚本在Chrome完成之前不会退出,尽管它没有任何关系。我必须记住将脚本放在后台。

我想要什么

我希望启动Chrome的子流程完全独立于主流程,以便在启动Chrome后立即返回命令提示符。启动Chrome后,我的脚本已完成其工作。我想过使用daemonize模块,但它显然不适用于Python 3.

我没有与multiprocessing模块结合。产生所需最终结果的任何合理方法都是可以接受的。切换到Python 2所以我可以尝试daemonize太难了。

该脚本只能在Linux上运行,因此可移植性不是问题。

0 个答案:

没有答案