首页 > 解决方案 > Python 3.8 中的多处理

问题描述

我第一次尝试在 python 中使用多处理。我写了一个基本的素数搜索程序,我想在每个核心上同时运行它。问题是:当程序执行多处理时,它不仅执行“primesearch”功能,而且还执行代码的开头。我的预期输出将是一个介于 0 和一个限制之间的素数列表,但它写了 16 次(我有 16 个内核和 16 个进程)“输入一个限制:”

这是我的代码:

import time
import os
from multiprocessing import Process

# Defining lists
primes = []
processes = []
l = [0]


limit = int(input('Enter a limit: '))

def primesearch(lower,upper):
    global primes
    for num in range(lower, upper):
        if num > 1:
            for i in range(2, num):
                if (num % i) == 0:
                    break
            else:
                primes.append(num)


# Start the clock
starter = time.perf_counter()

#Dividing data
step = limit // os.cpu_count()

for x in range(os.cpu_count()):
    l.append(step * (x+1))

l[-1] = limit

#Multiprocessing
for init in range(os.cpu_count()):
    processes.append(Process(target=primesearch, args=[l[init], l[init + 1],] ))

for process in processes:
    process.start()

for process in processes:
    process.join()


#End clock
finish = time.perf_counter()


print(primes)
print(f'Finished in {round(finish-starter, 2)} second')

可能是什么问题呢?

标签: pythonpython-3.xmultithreadingmultiprocessing

解决方案


您正在使用 Windows - 如果您阅读 Python 文档进行多处理,它将向您表明您应该使用保护您的主代码if __name__==“__main__”:这是因为在 Windows 上,每个进程都重新执行完整的主 .py 文件。

这几乎在文档中的每个示例中都有使用,并在最后的“编程指南”部分中进行了解释。

https://docs.python.org/3/library/multiprocessing.html


推荐阅读