V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
baocaixiong
V2EX  ›  Python

python守护进程的问题(代码肿么美化?)

  •  
  •   baocaixiong · 2013-12-11 17:42:04 +08:00 · 3796 次点击
    这是一个创建于 4000 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想尝试着弄个守护进程,首先要简单的代码测试测试,代码如下:
    <code>
    # coding: utf8

    from multiprocessing import Process
    import os
    import time
    import setproctitle


    setproctitle.setproctitle('subprocess')
    def targ(x):
    setproctitle.setproctitle('subprocess_' + str(x))
    print '这是一个进程任务' + str(os.getpid())
    while 1:
    time.sleep(0.5)

    processes = {}

    def createProc(x):
    process = Process(target=targ, args=(x,))
    process.start()

    processes[process.pid] = x

    for x in range(2):
    createProc(x)


    for pid, x in processes.iteritems():

    pid, status = os.wait()

    del processes[pid]

    createProc(x)
    </code>
    很明显,这个程序很容易就能跑起来,然后也产生了两个进程。并且kill掉其中一个进程的时候,进程也会重新被创建。
    问题来了:
    当我同时kill掉两个进程的时候,只有一个子进程能够重新创建。求解决办法。谢谢。
    10 条回复    1970-01-01 08:00:00 +08:00
    loveshouhu
        1
    loveshouhu  
       2013-12-11 17:48:03 +08:00   ❤️ 1
    代码贴到gist 然后把url发过来就会默认用gist的排版。
    baocaixiong
        2
    baocaixiong  
    OP
       2013-12-11 17:51:38 +08:00
    baocaixiong
        3
    baocaixiong  
    OP
       2013-12-11 17:52:47 +08:00
    @loveshouhu 感谢。
    kier
        5
    kier  
       2013-12-11 18:05:56 +08:00
    这。。,在遍历processess的时候,改变processes的值,确定不会出错?
    baocaixiong
        6
    baocaixiong  
    OP
       2013-12-11 18:30:07 +08:00
    yueyoum
        7
    yueyoum  
       2013-12-11 18:40:05 +08:00
    ues this:
    https://github.com/yueyoum/daemonize

    pip install daemonzied
    tanywei
        8
    tanywei  
       2013-12-12 16:05:33 +08:00
    supervisor?
    baocaixiong
        9
    baocaixiong  
    OP
       2013-12-12 16:24:29 +08:00
    @tanywei
    @yueyoum
    @kier
    @sarowlwp
    @loveshouhu

    其实我是想问,为什么同时kill掉两个子进程的时候,只会重启一个。这样写的有什么bug,这是学习的过程,并不是要使用的。呵呵。谢谢大家了。
    kier
        10
    kier  
       2013-12-12 17:13:41 +08:00
    @baocaixiong kill的话,应该是signal 15,这个是不稳定信号,当一个信号在进程中注销到执行信号处理函数之间如果再有同样的信号发生,kernel就会忽略这个信号, 认为只有一个信号发生
    有可能是这个原因,需要你继续去证实!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   958 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:48 · PVG 04:48 · LAX 12:48 · JFK 15:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.