Максимальный размер для многопроцессорной обработки. Элемент очереди?
Я работаю над довольно крупным проектом на Python, который требует, чтобы одна из ресурсоемких фоновых задач была выгружена в другое ядро, чтобы основной сервис не замедлялся. Я столкнулся с каким-то странным поведением при использованииmultiprocessing.Queue
сообщить результаты рабочего процесса. Использование одной и той же очереди дляthreading.Thread
иmultiprocessing.Process
для сравнения поток работает просто отлично, но процессу не удается присоединиться после помещения большого элемента в очередь. Заметим:
<code>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()) </code>
Я видел, что это прекрасно работает дляsize = 10000
, но висит наworker_p.join()
заsize = 100000
, Есть ли какое-то ограничение на размерmultiprocessing.Process
экземпляры могут положить вmultiprocessing.Queue
? Или я делаю здесь очевидную фундаментальную ошибку?
Для справки, я использую Python 2.6.5 в Ubuntu 10.04.