【问题标题】:Run multiple python scripts concurrently with different CMD name使用不同的 CMD 名称同时运行多个 python 脚本
【发布时间】:2017-04-12 07:10:17
【问题描述】:

我尝试通过 multiprocessing.Process() 在 test.py 中同时调用 a.py 和 b.py,它起作用了。但是a.py、b.py和test.py的进程CMD名称,都是'/usr/bin/python/tmp/test.py',是一样的。

# ps -ef | grep b.py
UID   PID  PPID   C STIME   TTY           TIME CMD
501 61486 39878   0  2:33PM ??         0:00.05 /usr/bin/python /tmp/test.py
501 61487 61486   0  2:33PM ??         0:00.01 /usr/bin/python /tmp/test.py
501 61488 61486   0  2:33PM ??         0:00.01 /usr/bin/python /tmp/test.py

我想让这三个进程通过 'ps -ef' 显示不同的 CMD 名称,如下所示:(这可以帮助我识别不同的进程是否正在运行。)

# ps -ef | grep b.py
UID   PID  PPID   C STIME   TTY           TIME CMD
501 61486 39878   0  2:33PM ??         0:00.05 /usr/bin/python /tmp/test.py
501 61487 61486   0  2:33PM ??         0:00.01 /usr/bin/python /tmp/a.py
501 61488 61486   0  2:33PM ??         0:00.01 /usr/bin/python /tmp/b.py

请帮忙指点一下:)

源码如下:

test.py:

import multiprocessing
import a
import b


p1 = multiprocessing.Process(target=a.printa)
p2 = multiprocessing.Process(target=b.printb)

p1.start()
p2.start()

a.py:

import time


def printa():
    while True:
        print 'a'
        time.sleep(1)

if __name__ == '__main__':
    printa()

b.py:

import time

def printb():
    while True:
        print 'b'
        time.sleep(1)

if __name__ == '__main__':
    printb()

【问题讨论】:

  • 这是我的问题的解决方案,但列出 python xxx.py & 的行似乎有点奇怪。 stackoverflow.com/questions/28549641/…
  • 使用Subprocess 而不是Process
  • @stovfl subprocess 可以调用模块的特定方法吗?谢谢。
  • 是的,最简单的情况调用if __name__ 下面的method
  • 您能帮忙解释一下解决方案吗?像一个例子?谢谢:)

标签: python multiprocessing


【解决方案1】:

您正在使用a.pyb.py 作为python 中的库,因此它以与执行文件test.py 相同的名称调用。使用multiprocessingjoblib都会出现同样的情况。

Process 方法 (multiprocessing.Process(self, group=None, target=None, name=None, args=(), kwargs={})) 中有一个名称选项,但正如 @fedterzi 所说,它仅用于识别目的。

如果要调用进程或文件,可以使用库subprocess

根据您正在执行的任务,例如并行化一堆进程,您还可以使用gnu parallel 或通过bash 的其他方法来完成您想要的行为。

【讨论】:

  • 不,进程名称不会改变进程标题,它只是用于识别目的
【解决方案2】:

阅读 Python » 2.7.13 文档using-the-subprocess-module
subprocess一个NOWAIT方法中选择, 相应地编辑您的问题代码。

import subprocess

def openCmd(name):
    return subprocess.?

if __name__ == '__main__':
    while True:
        key = raw_input('input 1=open, 0=terminate, q=quit:')
        print(key)
        if key == '1':
            A_p = openCmd(('a'))
            B_p = openCmd(('b'))
        if key == '0':
            A_p.terminate()
            B_p.terminate()
        if key == 'q':
            break

用 Python:2.7.9 测试

【讨论】:

  • 什么是'return subprocess.?'意思是?谢谢:)
  • @WillZhou:subprocess.? 是一个占位符。阅读建议的文档并从 subprocess 模块中选择一个方法。
猜你喜欢
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 2017-06-23
  • 2020-02-19
相关资源
最近更新 更多