多处理工人以一种奇怪的方式过早死亡

2024-07-08 08:30:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,可以通过多重处理找到所有的素数,但是有一半的工作人员很快死亡

我注意到,即将早逝的工人根本没有i/O操作,而其他工人则在正常运行

我产生了8个工人和半个模具,这是任务管理器视图: enter image description here

这是赋予工人的功能:

import time
import multiprocessing


def prime(i, processes, maxnum, primes): 

    while maxnum >= i:

        f = False

        if i <= 1:
            i += processes
            continue

        else:
            for j in range(2, int(i**0.5)+1, 1): 
                if i % j == 0:
                    i += processes
                    f = True
                    break

        if f:
            continue

        primes.append(i) # append if prime.

        i += processes
        # increment by number of processes, example: p1 (i =1) p2 (i=2) 
        #up to i = processes, then all jumps by num of processes, check for bugs

这里是工人们的主要来源:

def main():
    start = time.monotonic()
    manager = multiprocessing.Manager()
    primes = manager.list()
    maxnum = 10000000
    processes = 8
    plist = []

    for i in range(1, processes + 1): # adds each new process to plist

        plist.append(multiprocessing.Process(target=prime, args=(i, processes, maxnum, primes,)))

    for p in plist: # starts the processes in plist and prints out process.pid
        p.start()
        print(p.pid)


    [p.join() for p in plist]

    print("time taken: " + str((time.monotonic() - start) / 60) + ' mins')
    print(plist)

    print(sorted(primes))  #unsure how long does the sorting takes


if __name__ == "__main__": # multiprocessing needs guarding. so all code goes into main i guess
    main()

以下是启动5秒后的进程状态:

[<Process(Process-2, started)>, <Process(Process-3, stopped)>, <Process(Process-4, started)>, <Process(Process-5, stopped)>,
 <Process(Process-6, started)>, <Process(Process-7, stopped)>, <Process(Process-8, started)>, <Process(Process-9, stopped)>]

我发现不寻常的是,这里有一个模式,每一个繁殖的工人下一个死亡


Tags: inforiftimemainmultiprocessingprocessprimes

热门问题