0

我的帖子

个人中心

设置

  发新话题
目前用的是跑两个子进程,子进程的函数是无限循环,但是跑了半个小时发现其中一个子进程跑成zombie了,所以打算把子进程的函数设置成返回值的,然后在主进程里判断返回值  执行完了就 再重开。
但是看了下p.start()后 好像是没返回值的。  说是要用pool   有没有不用改pool的方法 获取到子进程的返回值?
for i in range(2):
    p = Process(target=comm.ngxlog, args=(q,rlock))
    p.start()
p.join()



子线程可能容易得到返回值,子进程相互通信我不大了解。。不过,既然你都能查看到子进程变成了僵尸,就可以通过脚本监控把它干掉噻。。。写个任务计划,每XX分钟检查一次即可。



宝剑厉不厉害,要看它的主人是谁,不信来PHP版块看看~!
引用:
原帖由 七彩极 于 2017-7-8 16:19 发表
子线程可能容易得到返回值,子进程相互通信我不大了解。。不过,既然你都能查看到子进程变成了僵尸,就可以通过脚本监控把它干掉噻。。。写个任务计划,每XX分钟检查一次即可。 ...
僵尸干掉是容易,但是干掉的同时 也把进程里的数据也干掉了,导致最终要的结果 出现大量偏差。



那就只有不断地保存临时数据咯~作为运行日志记录



宝剑厉不厉害,要看它的主人是谁,不信来PHP版块看看~!
引用:
原帖由 七彩极 于 2017-7-12 14:48 发表
那就只有不断地保存临时数据咯~作为运行日志记录
现在的难点是如果我
for i in range(4):        
p = Process(target=comm.ngxlog,args=(q,))
p.start()
p.join()
开4个进程  join放循环里 就变串行,而join放外面 就是最后一个子进程会join住,而其他前面3个子进程就会出现僵尸进程。导致数据丢失。



@sublimePython    版主给回答一下呗~



我是论坛逗比管理员
大家有事儿没事儿可以撩我~
引用:
原帖由 咖啡 于 2017-7-13 18:08 发表
@sublimePython    版主给回答一下呗~
还真有人想我啊,哈哈,最近比较忙。才看见。这个简单,直接get一下就有了。我一会简单贴个demo



引用:
原帖由 项俊杰 于 2017-7-7 11:35 发表
目前用的是跑两个子进程,子进程的函数是无限循环,但是跑了半个小时发现其中一个子进程跑成zombie了,所以打算把子进程的函数设置成返回值的,然后在主进程里判断返回值  执行完了就 再重开。
但是看了下p.start()后 好像是 ...
建议用Pool来完成。代码类似于:
复制内容到剪贴板
代码:
from multiprocessing import Pool
p = Pool()
result = p.apply_async(foo, args=(a, ))
# foo和a分别是你的方法和参数,这行可以写多个,执行多个进程,返回不同结果
p.close()
p.join()
最后用result.get()就得到结果了



‹‹ 上一贴:【经验】Windows 环境下Python2.7与Python3.5共存安装 ...   |   下一贴:【开发环境】干净的安装Python2.7.x / 3.x ››
  发新话题
快速回复主题
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 友情链接 |意见反馈 | 网站地图
Copyright©2005-2017 51CTO.COM
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系:bbs@51cto.com