LINUX.ORG.RU

Избранные сообщения bohrman

multiprocessing - проблема с расшариванием переменных между процессами

Форум — Development

Добрый день

В программе необходимо иметь общую переменную, в данном случае список deque, между процессами. При использовании модуля multiprocessing, каждый процесс работает с отдельной копией списка, не используя общую переданную переменную. При использовании модуля threading.Thread каждый поток работает с общим списком, так как нужно. В программе необходимо использовать именно модуль multiprocessing. Прошу подсказать как расшарить переменную между процессами модуля multiprocessing.

# -*- coding: utf-8 -*-

import multiprocessing as mp
import threading
import time
import random

from collections import deque


class ManageUpdate(mp.Process):
# class ManageUpdate(threading.Thread):
    def __init__(self, queue, condition):
        # threading.Thread.__init__(self)
        mp.Process.__init__(self)
        self.queue = queue
        self.condition = condition

    def run(self):
        while True:
            rand_data = '%d' % random.randint(0, 256)
            self.condition.acquire()
            print 'condition acquire by %s' % self.name
            self.queue.append(rand_data)
            print 'after change', self.queue
            print '===' * 10
            print '\n'
            self.condition.notify()
            self.condition.release()
            time.sleep(random.random())
            
            

if __name__ == '__main__':
    condition = mp.Condition()
    d = deque(maxlen=9)
    d.append('CHECK CHECK CHECK')
    
    for count in range(5):
        worker = ManageUpdate(d, condition)
        worker.daemon = True
        worker.start()
        time.sleep(3)

 

bohrman
()