Linux python 多进程编程遇到的问题,请高手赐教

flyfire · May 05, 2018 · Last by hellohell replied at May 07, 2018 · 1815 hits
import os,time,random

from multiprocessing import Process

PROCESS_MAX_NUM = 10

def get_num(number):
print(number)
time.sleep(10*random.random())



if __name__ == "__main__":
process_dict = {}
for number in range(100):
if len( process_dict.keys() ) < PROCESS_MAX_NUM:
p = Process( target=get_num, args=(number ,) )
p.start()
process_dict[ p ] = time.time()
continue

while len( process_dict.keys() ) >= PROCESS_MAX_NUM :
for p in list( process_dict.keys() ):
current_time = time.time()
if ( current_time - process_dict[p] ) > 5 and p.is_alive():
print(p.name + " is terminate ")
p.terminate()
del process_dict[p]
elif not p.is_alive():
del process_dict[p]
else:
continue
time.sleep(1)

if len( process_dict.keys() ) == 0:
print("all task done")

上面的程序运行时总是不会输出最后的打印信息,而且时不时的少数据,应该是打印出来100个网址的,但是实际上只打印出来了60多个数

请高手赐教,为啥会这样?

共收到 5 条回复 时间 点赞

换正常的生产者消费者模型

你现在把生产和消费都挂在生产的规则中
一旦生产完,直接就会忽略未消费完的任务

2者要分离

不输出行为条件不匹配

另外,你这个用进程池不行么
超时的逻辑可以做在进程内

  • 楼上说的对
  • 那个continue 有啥用,for 循环的最后一句
flyfire #3 · May 07, 2018 作者

好建议,超时的逻辑确实可以做在进程内,谢啦

flyfire #4 · May 07, 2018 作者
hellohell 回复

那个没啥用,只是占个位置,哈哈

flyfire 回复

还有如此骚操作😂

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up