Tôi đang cố gắng sử dụng một hồ bơi công nhân trong python bằng cách sử dụng các đối tượng Process. Mỗi nhân viên (một Process) thực hiện một số khởi tạo (mất một khoảng thời gian không nhỏ), được thông qua một loạt các công việc (lý tưởng là sử dụng map()
), và trả về một cái gì đó. Không có thông tin liên lạc là cần thiết ngoài đó. Tuy nhiên, tôi không thể tìm ra cách sử dụng map() để sử dụng chức năng compute()
của công nhân của tôi.python Pool with worker Quy trình
from multiprocessing import Pool, Process
class Worker(Process):
def __init__(self):
print 'Worker started'
# do some initialization here
super(Worker, self).__init__()
def compute(self, data):
print 'Computing things!'
return data * data
if __name__ == '__main__':
# This works fine
worker = Worker()
print worker.compute(3)
# workers get initialized fine
pool = Pool(processes = 4,
initializer = Worker)
data = range(10)
# How to use my worker pool?
result = pool.map(compute, data)
Công việc có xếp hàng thay thế hay tôi có thể sử dụng map()
?
Tất cả các đối tượng quá trình đều có trạng thái. Bạn có thể muốn xóa từ đó khỏi tiêu đề. Cũng thế. 'compute' là một phương thức của một Worker. Trong các ví dụ, nó thường là một chức năng hoàn toàn độc lập. Tại sao không viết chức năng tính toán để đơn giản bao gồm cả khởi tạo và xử lý? –
Đủ công bằng, cảm ơn. Việc khởi tạo mất một thời gian dài, vì vậy tôi chỉ muốn làm điều đó một lần cho mỗi quy trình công nhân. – Felix
Bạn phải nhấn mạnh "được truyền một loạt công việc" một phần của câu hỏi. Vì điều đó không rõ ràng. –