2 回答

TA貢獻1799條經驗 獲得超6個贊
我在 Python 2.7 中運行它并且運行良好。
代碼:
import multiprocessing
import time
def is_prime(n):
if (n <= 1):
return 'not a prime number'
if (n <= 3):
return 'prime number'
if (n % 2 == 0 or n % 3 == 0):
return 'not a prime number'
i = 5
while (i * i <= n):
if (n % i == 0 or n % (i + 2) == 0):
return 'not a prime number'
i = i + 6
return 'prime number'
def multiprocessing_func(x):
time.sleep(2)
print('{} is {}'.format(x, is_prime(x)))
if __name__ == '__main__':
starttime = time.time()
processes = []
for i in range(1, 200):
p = multiprocessing.Process(target=multiprocessing_func, args=(i,))
processes.append(p)
p.start()
for process in processes:
process.join()
print('Time taken = {} seconds'.format(time.time() - starttime))
輸出:
3 is prime number1 is not a prime number
2 is prime number
5 is prime number6 is not a prime number
7 is prime number8 is not a prime number
9 is not a prime number
10 is not a prime number
14 is not a prime number12 is not a prime number16 is not a prime number
15 is not a prime number
13 is prime number
4 is not a prime number
17 is prime number
26 is not a prime number
21 is not a prime number24 is not a prime number
29 is prime number
20 is not a prime number27 is not a prime number22 is not a prime number19 is prime number
25 is not a prime number
18 is not a prime number
30 is not a prime number11 is prime number
23 is prime number
28 is not a prime number33 is not a prime number31 is prime number
32 is not a prime number35 is not a prime number34 is not a prime number
39 is not a prime number36 is not a prime number38 is not a prime number37 is prime number
40 is not a prime number
41 is prime number
42 is not a prime number43 is prime number
45 is not a prime number44 is not a prime number
46 is not a prime number47 is prime number48 is not a prime number
49 is not a prime number
50 is not a prime number
52 is not a prime number51 is not a prime number
53 is prime number54 is not a prime number55 is not a prime number
56 is not a prime number
59 is prime number
57 is not a prime number
61 is prime number
62 is not a prime number60 is not a prime number
64 is not a prime number63 is not a prime number58 is not a prime number
67 is prime number65 is not a prime number66 is not a prime number68 is not a prime number
69 is not a prime number
70 is not a prime number72 is not a prime number
71 is prime number
74 is not a prime number73 is prime number
75 is not a prime number
78 is not a prime number
77 is not a prime number
80 is not a prime number
83 is prime number
85 is not a prime number79 is prime number
81 is not a prime number
76 is not a prime number84 is not a prime number
82 is not a prime number
87 is not a prime number89 is prime number
88 is not a prime number
90 is not a prime number92 is not a prime number91 is not a prime number
86 is not a prime number
95 is not a prime number
93 is not a prime number94 is not a prime number
96 is not a prime number
97 is prime number99 is not a prime number98 is not a prime number
101 is prime number
103 is prime number
100 is not a prime number
105 is not a prime number
102 is not a prime number107 is prime number
104 is not a prime number
106 is not a prime number
108 is not a prime number
110 is not a prime number
109 is prime number
112 is not a prime number111 is not a prime number
113 is prime number114 is not a prime number
115 is not a prime number
116 is not a prime number
117 is not a prime number
118 is not a prime number
120 is not a prime number119 is not a prime number
121 is not a prime number
122 is not a prime number123 is not a prime number
124 is not a prime number
125 is not a prime number
126 is not a prime number
127 is prime number
128 is not a prime number
130 is not a prime number129 is not a prime number
132 is not a prime number
131 is prime number
133 is not a prime number
134 is not a prime number
135 is not a prime number
136 is not a prime number
139 is prime number
138 is not a prime number
137 is prime number
140 is not a prime number142 is not a prime number
141 is not a prime number
143 is not a prime number
145 is not a prime number
144 is not a prime number
146 is not a prime number147 is not a prime number
148 is not a prime number
149 is prime number
150 is not a prime number
151 is prime number
154 is not a prime number
152 is not a prime number153 is not a prime number
155 is not a prime number
156 is not a prime number
158 is not a prime number157 is prime number
159 is not a prime number
161 is not a prime number160 is not a prime number
162 is not a prime number
163 is prime number
164 is not a prime number
165 is not a prime number
167 is prime number166 is not a prime number
168 is not a prime number
169 is not a prime number
170 is not a prime number
171 is not a prime number
172 is not a prime number173 is prime number
174 is not a prime number
175 is not a prime number
176 is not a prime number
178 is not a prime number
179 is prime number
177 is not a prime number
181 is prime number
180 is not a prime number
183 is not a prime number182 is not a prime number
184 is not a prime number
185 is not a prime number186 is not a prime number
187 is not a prime number
188 is not a prime number
189 is not a prime number
190 is not a prime number
192 is not a prime number
191 is prime number
193 is prime number
194 is not a prime number
195 is not a prime number
196 is not a prime number197 is prime number
198 is not a prime number199 is prime number
Time taken = 2.24506902695 seconds
Process finished with exit code 0

TA貢獻1835條經驗 獲得超7個贊
你的代碼是正確的。
創建一個進程是一項繁重的任務,你的功能非??欤阅憧赡軙玫揭粋€進程并快速運行,它退出,然后再準備和啟動下一個進程。
注意:從你的邏輯來看is_prime()
,整數越小,函數執行時間越短。因此,在這種情況下,查看流程也無濟于事。
我修改了你的代碼:
time.sleep(random.randint(2, 6))
所以現在你在每個過程中都有更多的時間(和隨機的)。
但是您可能必須為每個進程計算更大的塊,以便為進程提供一些工作(并將它們放入內核調度程序)(例如,檢查 10_000 個素數,主程序只發送塊的開始),或者檢查更大的multiprocessing_func
數字.
所以:你的代碼是正確的,但 CPU 沒有真正的工作,以便真正完整地看到多處理。
添加回答
舉報