Đây là chương trình số nguyên tố chính của tôi, tôi đã thêm một hàm gọi lại trong pool.apply_async(findK, args=(N,begin,end))
, một thông báo nhắc ra prime factorization is over
khi hệ số hóa kết thúc, nó hoạt động tốt.Làm thế nào để vượt qua trường hợp đa xử lý.Pool để apply_async chức năng gọi lại?
import math
import multiprocessing
def findK(N,begin,end):
for k in range(begin,end):
if N% k == 0:
print(N,"=" ,k ,"*", N/k)
return True
return False
def prompt(result):
if result:
print("prime factorization is over")
def mainFun(N,process_num):
pool = multiprocessing.Pool(process_num)
for i in range(process_num):
if i ==0 :
begin =2
else:
begin = int(math.sqrt(N)/process_num*i)+1
end = int(math.sqrt(N)/process_num*(i+1))
pool.apply_async(findK, args=(N,begin,end) , callback = prompt)
pool.close()
pool.join()
if __name__ == "__main__":
N = 684568031001583853
process_num = 16
mainFun(N,process_num)
Bây giờ tôi muốn thay đổi chức năng gọi lại trong apply_async, để thay đổi lời nhắc thành chức năng tắt máy để tiêu diệt tất cả các quy trình khác.
def prompt(result):
if result:
pool.terminate()
Trường hợp hồ bơi không được xác định trong phạm vi nhanh hoặc được chuyển vào lời nhắc.
pool.terminate()
không thể hoạt động trong chức năng nhắc.
Làm thế nào để vượt qua đa xử lý.Đối tượng dụ để apply_async'callback chức năng?
(Tôi đã thực hiện nó được thực hiện ở định dạng lớp, chỉ cần thêm một phương thức lớp và gọi self.pool.terminate có thể giết chết tất cả các quá trình khác, làm thế nào để thực hiện công việc ở định dạng chức năng?)
nếu không thiết lập hồ bơi như biến toàn cầu, có thể pool được chuyển vào hàm callback?
nếu không đặt nhóm làm biến toàn cầu, nhóm có thể được chuyển vào hàm gọi lại không? –