python process join,何时对进程调用.join()?

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-29 20:53   40   0

尝试运行此:import math

import time

from multiprocessing import Queue

import multiprocessing

def factorize_naive(n):

factors = []

for div in range(2, int(n**.5)+1):

while not n % div:

factors.append(div)

n //= div

if n != 1:

factors.append(n)

return factors

nums = range(100000)

nprocs = 4

def worker(nums, out_q):

""" The worker function, invoked in a process. 'nums' is a

list of numbers to factor. The results are placed in

a dictionary that's pushed to a queue.

"""

outdict = {}

for n in nums:

outdict[n] = factorize_naive(n)

out_q.put(outdict)

# Each process will get 'chunksize' nums and a queue to put his out

# dict into

out_q = Queue()

chunksize = int(math.ceil(len(nums) / float(nprocs)))

procs = []

for i in range(nprocs):

p = multiprocessing.Process(

target=worker,

args=(nums[chunksize * i:chunksize * (i + 1)],

out_q))

procs.append(p)

p.start()

# Collect all results into a single result dict. We know how many dicts

# with results to expect.

resultdict = {}

for i in range(nprocs):

resultdict.update(out_q.get())

time.sleep(5)

# Wait for all worker processes to finish

for p in procs:

p.join()

print resultdict

time.sleep(15)

打开任务管理器。您应该能够看到4个子进程在被操作系统终止(由于连接调用)之前处于僵尸状态几秒钟:

91vJs.png

在更复杂的情况下,子进程可能永远处于僵尸状态(就像您在另一个question中询问的情况),如果创建了足够多的子进程,则可以填充进程表,从而给操作系统带来麻烦(这可能会杀死主进程以避免失败)。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP