Tôi đang làm việc trên một dự án khá lớn trong Python yêu cầu một trong các tác vụ nền chuyên sâu tính toán được tải xuống lõi khác, để dịch vụ chính không bị chậm lại. Tôi đã đi qua một số hành vi rõ ràng lạ khi sử dụng multiprocessing.Queue
để truyền đạt kết quả từ quá trình công nhân. Sử dụng cùng một hàng đợi cho cả một số threading.Thread
và multiprocessing.Process
cho mục đích so sánh, luồng chỉ hoạt động tốt nhưng quy trình không tham gia được sau khi đặt một mục lớn trong hàng đợi. Quan sát:Kích thước tối đa cho đa xử lý.Queue mục?
import threading
import multiprocessing
class WorkerThread(threading.Thread):
def __init__(self, queue, size):
threading.Thread.__init__(self)
self.queue = queue
self.size = size
def run(self):
self.queue.put(range(size))
class WorkerProcess(multiprocessing.Process):
def __init__(self, queue, size):
multiprocessing.Process.__init__(self)
self.queue = queue
self.size = size
def run(self):
self.queue.put(range(size))
if __name__ == "__main__":
size = 100000
queue = multiprocessing.Queue()
worker_t = WorkerThread(queue, size)
worker_p = WorkerProcess(queue, size)
worker_t.start()
worker_t.join()
print 'thread results length:', len(queue.get())
worker_p.start()
worker_p.join()
print 'process results length:', len(queue.get())
I have seen that này hoạt động tốt cho size = 10000
, nhưng treo tại worker_p.join()
cho size = 100000
. Có giới hạn kích thước cố hữu nào đối với trường hợp multiprocessing.Process
nào có thể đặt trong một số multiprocessing.Queue
không? Hay tôi đang tạo ra một số lỗi cơ bản rõ ràng ở đây?
Để tham khảo, tôi đang sử dụng Python 2.6.5 trên Ubuntu 10.04.
Cảm ơn, đó chính xác là vấn đề tôi đang gặp phải và xóa bỏ trong chuỗi gốc trước khi tham gia có vẻ hoạt động tốt. –
cảm ơn bạn rất nhiều. chỉ cần hoán đổi 2 dòng: "worker_t.join() in 'độ dài kết quả luồng:', len (queue.get())" – Catbuilts